1

私は AS3 でゲームを作成しています。敵の弾丸のクラス ファイルには、このコードがあります。

public class enemy2Bullet extends MovieClip
{

    public function enemy2Bullet()
    {
        stop();
        //Setup an event listener to see if the bullet is added to the stage.
        addEventListener(Event.ADDED_TO_STAGE, onAdd);
    }

    private function onAdd(e:Event):void
    {
        removeEventListener(Event.ADDED_TO_STAGE, onAdd);
        //Now that our object is on the stage, run our custom code.
        init();
    }

    private function init():void
    {
        if (Math.random() <= 0.5)
        {
        addEventListener(Event.ENTER_FRAME, bullet2Loop)
        }
        else
        {
        addEventListener(Event.ENTER_FRAME, bullet2Loop2)
        }
    }

    private function bullet2Loop(e:Event):void
    {
        if (currentLabel != "destroyed")
        {
            this.x += 8;
        }
        if (currentLabel == "destroyedComplete")
        { 
            destroyEnemy2Bullet();
        }
    }

    private function bullet2Loop2(e:Event):void
    {
        if (currentLabel != "destroyed")
        {
            this.x -= 8;
        }
        if (currentLabel == "destroyedComplete")
        {
            destroyEnemy2Bullet();
        }
    }

    public function destroyEnemy2Bullet():void
    {
        {
            //Remove the object from stage
            stage.removeChild(this);
            //Remove any event listeners
            removeEventListener(Event.ENTER_FRAME, bullet2Loop);
        }
    }
}

コンパイル後、ゲームは実行されますが、弾丸は 1 方向にしか発射されません。弾丸が左右両方から発射され、その方向にとどまるようにするにはどうすればよいですか?

これが私の敵2関数です。

private function enemy2Control():void
    {
        if (getTimer() - lastSpawnTime2 > 3000 && aEnemy2Array.length < 3)
        {
            var newEnemy2:MovieClip = new mcEnemy2;
            newEnemy2.x = Math.random() * 800;
            newEnemy2.y = 0;
            aEnemy2Array.push(newEnemy2);
            stage.addChild(newEnemy2);
            lastSpawnTime2 = getTimer();
        }
        //Control enemy's bullets
        for (var i:int = aEnemy2Array.length - 1; i >= 0; i--)
        {
            if (enemy2LastFire + 750 / (aEnemy2Array.length) < getTimer())

            {
                var currentEnemy2:mcEnemy2 = aEnemy2Array[i];
                if (Math.random() < 0.06)
                {
                    var newEnemy2Bullet:enemy2Bullet = new enemy2Bullet();
                    newEnemy2Bullet.x = currentEnemy2.x;
                    newEnemy2Bullet.y = currentEnemy2.y;
                    enemy2BulletArray.push(newEnemy2Bullet);
                    stage.addChild(newEnemy2Bullet);
                    enemy2LastFire = getTimer();
                }
            }
            for (var j:int = enemy2BulletArray.length - 1; j >= 0; j--)
            {
                var currentEnemy2Bullet:enemy2Bullet = enemy2BulletArray[j];
                if (currentEnemy2Bullet.y >= stage.stageHeight)
                {
                    enemy2BulletArray.splice(j, 1);
                    currentEnemy2Bullet.destroyEnemy2Bullet();
                }
                if (currentEnemy2Bullet.hitTestObject(playerCore))
                {
                    playerHP -= 1;
                    currentEnemy2Bullet.gotoAndPlay(2);
                    enemy2BulletArray.splice(j, 1);

                }
            }
        }

    }

どんな助けでも大歓迎です。

4

1 に答える 1

0

いくつかのこと:

•ステートメント全体を置き換えcurrentEnemy2Bulletj、単に削除することができます。var currentEnemy2Bullet:enemy2Bullet = enemy2BulletArray[j];

init()は呼び出されません。ただし、方向計算を行いnewEnemy2Bullet.addEventListener(Event.ENTER_FRAME, whatever)、 の実際の初期化内で使用するのが最善ですnewEnemy2Bullet

• 正直なところ、あなたのコードはかなり乱雑で、単純化することができます。たとえば、クラスに変数を与えて弾丸の方向を決定し、初期化時に値を与え、その変数に基づいてループの位置を更新させることができます。

于 2013-02-03T16:36:30.167 に答える