0

所以敌人确实丢了一枚硬币,但我没有得到硬币的属性(如果它击中玩家它会给他+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 错误。那么有人知道如何解决这个问题吗?

4

1 回答 1

0

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

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);
}
于 2013-05-14T14:08:22.370 回答