看看想想记记
标签类目:null

[置顶]flash as3常见错误及解决办法

1.SecurityError: Error #2000: 没有活动的安全上下文。
可能是用到相关的资源没有找到

2.[Info] Could not connect to the player, will try to connect for the next 56000 ms

这个很悲剧。我还以为是flash debug的问题,按照:老外的说法:,但好像也不行,结果是因为一个加载xml的问题,FLASH游戏进不去了,但FDT又没有报错!汗

另外有可能的问题如下:

http://hi.baidu.com/%D0%A1%C6%F3%B6%EC108/blog/item/de8a89013f77d362cb80c46d.html

2.5:
转SecurityError: Error #2148: SWF 文件 (SWF 文件不能访问本地资源) 的办法

http://uh.9ria.com/space.php?uid=38376&do=blog&id=8235

3.都用null来判断了,居然还无法判断
有时一个变量会出现这情况,尤其是AMF返回的数组数据的问题:其实这个时候要看看as3的定义:
其实Null、NaN和undefined都是变量的默认初始值。变量类型不同,系统给与的初始值就不同:
int,uint – 0
Boolean – false
Number – NaN
String,Array,Object – null
未指定变量类型 – undefined

来源这里

4.replace join
参考这里

var htmlString:String = string.split("\n").join("");

再来

var htmlString:String = string.replace(/\n/g, "");

5.空对象
这个是比较常出现的情况,比如在用户刷新过快的时候常常会出现:
a)前面刷新的对象已经清除了,但后面请求还没结束,所以出现这种
b)aMF请求过快,多次请求,导致前面的flash对回调函数还没处理完,后面的amf请求又来了,会导致前面没调用完,后面就来了...

6.按钮点击无效
var txtfield:TextField=new TextField();
txtfield.text=”MOVE1″;

var btnsprite:Sprite=new Sprite();
btnsprite.name=”MOVE2″;;
btnsprite.buttonMode=true;

btnsprite.graphics.beginFill(0x00cc00);
btnsprite.graphics.drawRect(0,0,50,30);
btnsprite.graphics.endFill();

btnsprite.addChild(txtfield);

//btnsprite.mouseChildren = false;
addChild(btnsprite);

btnsprite.addEventListener(MouseEvent.CLICK,ClkRotateBtn);
如果不加上mouseChildren会点不到??因为textfield的会跑到上面去了,
所以mouseChildren的意思就是:子对象的鼠标是否起效果??

7.从fdt(eclipse) 引入项目:
可以参考这里,有图有真相:

1)在eclipse里新建一个与要导入的工程同名工程;
2) file–>import–>Existing Project into Workspace

8.SDK安装
在fdt的安装过程中会不断出现要求有SDK安装的提示什么3.6 4.4 4.5神马的,有个简单的办法 
把SDK下载下来后,解压利用他的SEARCH功能,就可以直接把SDK给加进去,不知道会有什么问题没有。。目前

9.TypeError: Error #1009: 无法访问空对象引用的属性或方法。
[quote]
TypeError: Error #1009: 无法访问空对象引用的属性或方法。
at game.ui.main.chat::Chat()
at game.ui.main::Main()
at game.common::UIManager/initMain()
at game.common::UIManager/init()
at game.ui.game::Game/addedToStageHandler()
at flash.display::DisplayObjectContainer/addChild()
at game.ui.preloader::Preloader/loadGameComplete()[f:\\src\game\ui\preloader\Preloader.as:225]
at game.common::Resource/onComplete()[f:\\src\game\common\Resource.as:205]
at game.common::Resource/next()[f:\\src\game\common\Resource.as:305]
at game.common::Resource/binCompleteHandler()[f:\src\game\common\Resource.as:510]
[/quote]
开始查还以为是chat的初始化的问题,某些代码是哪里执行不下去,其实发现是初始化的时候,有一行代码加载到空资源对象了。。。

php中引用与对象备忘

<?php
$instance = new StdClass;//自定义一个类
$assigned   =  $instance; //在php5中,这种写法作用和下面一样,而不用传&,但还是有区别滴。。。
$reference  =& $instance; //作用是和上面相同,但本质还是不同的,$reference是个引用,他会跟着$instance共存亡
 
$instance->var = '$assigned will have this value';
var_dump($instance); //
var_dump($reference); //
var_dump($assigned); //以上三者都一样!不管赋值还是其他改变
 
$instance = null; // $instance and $reference become null
 
var_dump($instance); //他也不在了
var_dump($reference); //他已经不在了
var_dump($assigned); //他还在
?>

在PHP5手册中:
类与对象一章里:
当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。
但是把该对象的引用,赋值给一个变量,确实是用的引用

————————————–
中文手册:
对象和引用
在php5 的对象编程经常提到的一个关键点是“默认情况下对象是通过引用传递的”。但其实这不是完全正确的。下面通过一些例子来说明。

php的引用是别名,就是两个不同的变量名字指向相同的内容。
在php5,一个对象变量已经不再保存整个对象的值。只是保存一个标识符来访问真正的对象内容。

当对象作为参数传递,作为结果返回,
或者赋值给另外一个变量,另外一个变量跟原来的不是引用的关系,只是他们都保存着同一个标识符的拷贝,这个标识符指向同一个对象的真正内容。

自 PHP 5 起,new 自动返回引用,因此在此使用 =& 已经过时了并且会产生 E_STRICT 级别的消息。
这句话很别扭

—————————————

<?php
$a = 1;
$b =& $a;
unset($a); //如果把 $a=null ,下面的结果就不一样了
var_dump($a);  //a 已经不在了
var_dump($b); //b还在
?>

函数的引用返回:

function &test()
{
static $b=0;//申明一个静态变量
$b=$b+1;
echo $b;
return $b;
}
 
$a=test();//这条语句会输出$b的值为1
$a=5;
$a=test();//这条语句会输出$b的值为2
 
$a=&test();//这条语句会输出$b的值为3
$a=5;
$a=test();//这条语句会输出$b的值为6

$this self

$this
在一个对象的方法中,$this 永远是调用它的对象的引用。

self:
有点静态调用的意思:

class clsParent {
    static public function say( $str ) {
        self::do_print($str);//如果这里用$this->do_print($str); 会报没有这个实例的
    }
 
    static public function do_print( $str ) {
        echo "parent says $str";
    }
}
 
class clsChild extends clsParent{
    static public function do_print( $str ) {
        echo "child says $str";
    }
}
 
clsChild::say('Hello');
?>

其他:
//下面再来个小插曲
php中对于地址的指向(类似指针)功能不是由用户自己来实现的,是由Zend核心实现的,php中引用采用的是“写时拷贝”的原理,就是除非发生写操作,指向同一个地址的变量或者对象是不会被拷贝的。

通俗的讲
1:如果有下面的代码

$a=”ABC”;
$b=$a;

其实此时$a与$b都是指向同一内存地址而并不是$a与$b占用不同的内存

2:如果在上面的代码基础上再加上如下代码

$a=”EFG”;

由于$a与$b所指向的内存的数据要重新写一次了,此时Zend核心会自动判断自动为$b生产一个$a的数据拷贝,重新申请一块内存进行存储

静态调用:

<?php
class A
{
    function foo()
    {
        if (isset($this)) {
            echo '$this is defined (';
            echo get_class($this);
            echo ")\n";
        } else {
            echo "\$this is not defined.\n";
        }
    }
}
 
class B
{
    function bar()
    {
        A::foo();
    }
}
 
$a = new A();
$a->foo();
A::foo();//直接静态调用,而不用方法是不是静态方法 ,这样用有时是大有好处的
$b = new B();
$b->bar();
B::bar();
?>

类静态调用的好处:http://heshun.org/?p=178

返回顶部