对于AS 3.0来说,我似乎有一个问题,当我在Flash中测试一个单独的场景时,在运行外部AS文件时,而不是在测试整个电影或从Flash进行测试的时候。有人知道问题出在哪里吗?
下面是AS文件中的代码:
package {
import flash.display.MovieClip;
public class Level1 extends MovieClip {
public var myplayer:MyPlayer;
public function Level1() {
super();
myplayer.x = 516;
myplayer.y = 371;
if (myplayer.x == 516)
{
trace("player x is 516");
}
else if (myplayer.y == 371)
{
trace("player y is 371");
}
}
}
}
有什么想法吗?
编辑
我想我解决了问题。swf包含两个场景,外部AS文件在场景1开始时开始运行,但是myPlayer
电影剪辑直到Scene2才被实例化,我认为这除了给出一个1009 null object error
之外,还导致了我遇到的问题。
所以我只是删除了第一幕,现在一切都很好。也许我会把第一幕放在一个单独的SWF里?或者,有什么方法可以把剧本的执行推迟到某个场景?
发布于 2014-08-15 08:26:05
你的问题:
当doucment类的构造函数运行时,myPlayer
还不存在,因此它抛出一个1009
运行时错误,并在第一个引用myPlayer
时退出构造函数。
解决办法:
myPlayer
代码放在MyPlayer
时间线的第一帧上。或者使用当前文档类作为MyPlayer
的类文件(而不是documentClass)。将对myPlayer
的所有引用更改为this
。myPlayer
,然后运行代码。
this.addEventListener(Event.ENTER_FRAME,enterFrameHandler);函数enterFrameHandler(e):void { if( myPlayer ){ //运行myPlayer代码this.removeEventListener(Event.ENTER_FRAME,enterFrameHandler);}
如果您的帧速率是24 way,那么这段代码将每秒钟运行24次(直到它找到myPlayer
),所以这不是最好的执行方式。myPlayer
的第一个框架(或MyPLayer
的类文件)添加一个事件,告诉文档类它现在存在。
新事件(“stage.dispatchEvent”);
然后在document类上侦听该事件:
stage.addEventListener("myPlayerReady",playerReadyHandler);playerReadyHandler(e: event ):playerReadyHandler{//您的播放器代码var myPlayer = MyPlayer(e.target);//您甚至可以从事件对象}获得引用。发布于 2014-08-15 08:40:58
谢谢你的建设性的,有帮助的回答,LDMS。我以为我已经找到了解决办法,而我没有。你的建议奏效了。我所做的是将以下代码添加到MyPlayer的时间线中
this.x = 516;
this.y = 371;
if (this.x == 516)
{
trace("player x is 516");
}
if (this.y == 371)
{
trace("player y is 371");
}
我从document类中删除了代码。现在一切似乎都很好。再次感谢你的帮助!
https://stackoverflow.com/questions/25320297
复制相似问题