【问题标题】:AS3 - How do you Ignore a class (Error #1009)?AS3 - 你如何忽略一个类(错误 #1009)?
【发布时间】:2014-06-27 20:23:42
【问题描述】:

我为 MovieClip 创建了一个类,为玩家 (char) 创建硬币以供拾取。假设该课程所做的只是添加分数和硬币收集变量,然后从舞台上移除一枚硬币。但是当我使用gotoAndStop(#); 更改框架时,控制台垃圾邮件

ErrorType:错误 #1009:无法访问空对象引用的属性或方法。"

硬币类:

public class coin extends MovieClip{
    var char:MovieClip;
    var MainTimeLine = MovieClip(root);
    public function coin() {
        // constructor code
            this.addEventListener(Event.ENTER_FRAME,update);

    }

    function update(event:Event):void{
        if(MainTimeLine.currentFrame!=5){
            char=MovieClip(root).char;
            if(this.hitTestObject(char)){
                this.removeEventListener(Event.ENTER_FRAME,update);
                parent.removeChild(this);
                MainTimeLine.score++;
                MainTimeLine.coinscollected++;
            }
        }
    }

}

【问题讨论】:

  • 只是代码可读性最佳实践的提示。 CLASSES 使用大写首字母,实例/变量名使用小写首字母。所以在你的情况下,coin 应该是 CoinMainTimeLine 应该是 mainTimeLine。它还有助于在 stackoverflow 上突出显示代码
  • 您可以修复此错误或使用 try/catch 语句忽略它(真的不好的做法)。此外,如果您将变量名大写,玩家可能会感到困惑。
  • 硬币有动画吗?在这种情况下,您还应该在删除之前执行函数stop()。另外,这个错误在哪一行?此外,您应该将var char:MovieClip 更改为var char,这样它就不会为空。 (请记住,所有函数和变量都应该是驼峰式的。)

标签: class actionscript-3


【解决方案1】:

在您的显示对象被添加到显示列表之前,不会填充根目录。您需要在设置变量之前监听该事件。

var char:MovieClip;
var MainTimeLine; //do not initialize here, root is null at this point

public function coin() {
    // constructor code

    //root is still null here sometimes too, so see if it's populated yet
    if(root){
        init(); //root is populated, skip to initialization
    }else{
        this.addEventListener(Event.ADDED_TO_STAGE,addedToStage);  //root isn't populated yet, listen for added to stage and then initialize
    }
}

private function addedToStage(e:Event = null):void {
    this.removeEventListener(Event.ADDED_TO_STAGE,addedToStage);
    init();
}

private function init():void {
    MainTimeLine = MovieClip(root)
    this.addEventListener(Event.ENTER_FRAME,update);
}

【讨论】:

  • 非常感谢您的回答,但我刚刚意识到我应该详细说明该错误。 1009 错误指向“coin/update()”。
  • 答案仍然有效。那就是它会出错的地方,因为那是您尝试使用 MainTimeLine var 的地方 - 它被设置为 null
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 2017-09-06
相关资源
最近更新 更多