Actionscript 3 AS3-从类中的阶段访问MovieClip
我已经在这个问题上停留了很长时间,并且在这里查看了过去关于类似问题的问题,比如这篇文章: 我使用构造函数侦听Actionscript 3 AS3-从类中的阶段访问MovieClip,actionscript-3,flash,movieclip,Actionscript 3,Flash,Movieclip,我已经在这个问题上停留了很长时间,并且在这里查看了过去关于类似问题的问题,比如这篇文章: 我使用构造函数侦听ADDED_to_STAGE事件,然后启动主函数,从ADDED_to_STAGE处理程序设置eventListeners。在同一个处理程序中,我还尝试使用以下代码从stage获取MovieClip: player=stage.getChildByName(“player”)作为MovieClip player被全局定义为MovieClip 在另一个处理程序中(将类添加到stage之后),我
ADDED_to_STAGE
事件,然后启动主函数,从ADDED_to_STAGE
处理程序设置eventListeners
。在同一个处理程序中,我还尝试使用以下代码从stage获取MovieClip
:
player=stage.getChildByName(“player”)作为MovieClip代码>
player
被全局定义为MovieClip
在另一个处理程序中(将类添加到stage之后),我使用player.gotoAndStop(“跳转”)将player设置为转到特定的帧标签
代码>。但是,输出警告显示为“无法访问空对象引用的属性或方法”。
以下是我使用的代码:
public var player:MovieClip;
public function PlayerControl():void {
this.addEventListener(Event.ADDED_TO_STAGE, addedToStage);
}
private function addedToStage(event:Event):void{
removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
this.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
player = stage.getChildByName("player") as MovieClip;
}
private function enterFrameHandler(event:Event):void{
if(up == true && moviePlaying == false){
player.gotoAndStop("jump");
moviePlaying = true;
}
}
检查MC的实例是否实际命名为“player”。还可以尝试通过名称跟踪所有stage的子级:for(var i:int=0;它支持注释。我尝试了for循环,它显示了这两个名称:root1和instance3。当我从stage中删除播放器MovieClip并重新运行for循环时,instance3被instance2替换。但是在更改“player”之后在getChildByName to instance3中,我收到另一条输出错误消息:“在场景跳转中未找到帧标签跳转”。当您跟踪(播放器);
或跟踪(播放器类型);
时,您会得到什么?我在外部类中执行了跟踪(播放器)
,它显示:[对象播放器控制]
(注意:PlayerControl是类名)。跟踪(播放器类型);
向我展示:对象
。省去你的头痛,删除所有时间线动画。当你从一帧到另一帧移动时,Flash运行时会删除/添加对象到时间线,这会导致代码疯狂。转到发布设置并启用“允许调试”以获取显式信息,并使用control shift enter在调试模式下编译。这将为您提供调用堆栈和变量范围列表。很可能,您正在查找帧1中存在的属性(当您实例化某些对象时),而帧标签“jump”处不再存在的属性(其中闪存将其删除以匹配定义的状态)。