Flash编译错误

时间:2011-04-02 22:41:43

标签: flash actionscript-3 actionscript animation

我正在处理一个非常简单的闪存但是编译到swf文件有问题。详细的错误信息大致翻译如下:

* AssetManager.as

第47行:DisplayObject变量不能是“未定义”

第51行:DisplayObject变量不能是“未定义”

第101行:DisplayObject变量不能是“未定义”

enter image description here

* SWFaddress.as

第10行:已使用void方法,其中需要布尔值

第60行:取代问题(我怀疑这意味着某些文件已移至其他地方),不再支持clearInterval方法,已将其移至flash.utils pack

第243行:不再支持setInterval方法,它已被移动到flash.utils。请考虑Timer类

enter image description here

请参阅截屏,并突出显示有问题的代码行。

2 个答案:

答案 0 :(得分:2)

如果.getChildByName()无法获取DisplayObject,则会返回null。尝试将undefined更改为null。 (AssetManager.as中的第47,51,101行)

不使用flash.utils.*中的setInterval和clearInterval,而是使用flash.utils.Timer。 例如:

var myTimer:Timer = new Timer(1000); // 1 second
myTimer.addEventListener(TimerEvent.TIMER, runMany);
myTimer.start();

function runMany(event:TimerEvent):void {
    trace("runMany() called @ " + getTimer() + " ms");
}

在计时器对象上使用.stop()而不是clearInterval。有关Timer类的更多信息:flash.utils.Timer

ExternalInterface.available的情况下,我猜问题是因为你将_availability变量定义为静态。

P.S。参考代码的屏幕截图并不是很好的方法。下次更好地粘贴代码。

答案 1 :(得分:1)

虽然我从来没有尝试过这样的事情,因此无法真正说出来,但我猜你在SWFAddress中遇到的奇怪错误是由于你过度使用静力学造成的。当您在基于另一个静态变量的静态命名空间中将其转换为静态变量时,您将定义一个静态变量。编译器可能会说返回void是因为一个静态被定义在另一个之前,而未定义静态的默认值很可能是void,而不是null。这很难肯定,因为它需要查看tamarin C ++源代码,但无论如何我都会调用它。过度使用静态(如代码的情况)表明对类和对象结构缺乏了解。你应该定义静态的唯一时间是你想要定义一个对象的类型或这种性质的东西。例如,MouseEvent类具有静态以定义可以创建哪种类型的鼠标事件:MouseEvent.MOUSE_DOWN等。尝试更改类以便使用对象级方法和变量而不是静态方法正确实例化它们。或者,如果您想在此处完成项目,请尝试定义基于您手动调用的函数内部的其他静态变量的静态变量,而不是静态/类命名空间。

* *更新 很难将它全部放在一个答案中,但基本上就是静态工作的方式,它们是虚拟机创建的第一件事,它们是永久性的。它们不是动态或一次性对象,虚拟机真正构建使用的对象类型。静态是在其他任何事情之前定义的,所以,在奇怪错误的情况下你得到一个void而不是boolean,是因为当编译器或虚拟机向下移动“待办事项”列表时,它会像这样起泡到顶部并先做它们。但是,它可能在完全定义ExternalInterface.available静态变量之前尝试定义_availability静态变量。我希望这会给原来的答案增加一些澄清。