as3在Coin1 / coin1go()的错误1009,我试图让敌人投下一枚硬币

时间:2013-05-14 12:55:51

标签: actionscript-3 null typeerror stage

所以敌人确实丢了一枚硬币,但是我没有获得硬币的属性(如果它击中了玩家,它会给他+5个硬币)

如果硬币击中舞台的底部,如果玩家死亡或者玩家击中它,硬币将被移除。可悲的是,它不起作用。

但如果我在开始游戏之前在舞台上放置一枚硬币,它会获得所有属性,那么它确实有效,所以它必须是它被添加到舞台的那一刻它没有与编码或某事.....这就是我现在所处的位置。

这是硬币的.as文件:

包 {

import flash.display.MovieClip;
import flash.events.Event;
public class Coin1 extends MovieClip
{
    private var _root:Object;
    private var speed:int = 0;

    public function Coin1()
    {
    addEventListener(Event.ENTER_FRAME, Speed1);
    addEventListener(Event.ADDED, beginClass);
    addEventListener(Event.ENTER_FRAME, coin1go);
    }
    private function beginClass(event:Event):void
    {
        _root = MovieClip(root);
    }

    private function Speed1(event:Event):void
    {
        y +=  speed;
    }

        private function coin1go(event:Event):void
        {
        if (this.y > stage.stageHeight)
        {
            removeEventListener(Event.ENTER_FRAME, coin1go);
            _root.removeChild(this);
        }
        if (hitTestObject(_root.player_mc))
        {
            _root.coin +=  1;
            removeEventListener(Event.ENTER_FRAME, coin1go);
            _root.removeChild(this);

        }
        if (_root.playerhealth <= 1)
        {
            removeEventListener(Event.ENTER_FRAME, coin1go);
            _root.removeChild(this);

        }
    }
}

}

这是将其添加到舞台的部分:

    if (enemy2health <= 0)
    {
        removeEventListener(Event.ENTER_FRAME, eFrame);
        _root.score +=  _root.Enemy2Score * _root.scoremultiplyer;
        stage.addChild(newExplosionSmall)
        newExplosionSmall.x = this.x;
        newExplosionSmall.y = this.y;
        stage.addChild(newCoin1)
        newCoin1.x = this.x;
        newCoin1.y = this.y;

屁股你可以看到还有一个爆炸的附加组件可以完美地运行,但这可能是因为它除了出现之外什么也没做,并且自行移除。

如此长的故事简短:敌人掉落硬币但它什么也没做,浮在屏幕的底部,我得到了1009个错误的恒定流。所以有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

只有在收到有效stage引用后才应添加一个enterframe侦听器,该引用仅在收到Event.ADDED_TO_STAGE事件时显示。这是因为您的enterframe侦听器引用了stage。

public function Coin1()
{
    addEventListener(Event.ENTER_FRAME, Speed1);
    addEventListener(Event.ADDED_TO_STAGE, beginClass);
}
private function beginClass(event:Event):void
{
    _root = MovieClip(root);
    addEventListener(Event.ENTER_FRAME, coin1go);
}