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;

ご覧のとおり、爆発の addchild もあり、完全に正常に動作しますが、それは、それ自体が表示されて削除される以外に何もしないためかもしれません。

簡単に言えば、敵はコインを落としますが、何もせずに画面の下部に浮かび、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 に答える