0

画面の上から虫が下に移動するゲームを作っています。オブジェクトは、プレイヤーがマウスでこれらの昆虫を殺すことです。昆虫を殺すと、私が入れた場所にキル フレームが表示されます。キル フレームは 3 秒間そこにとどまり、オブジェクトは削除されます。これにより、プレイヤーのスコアも増加します。

このコードは昆虫の中に書かれています:

function kill(event:MouseEvent):void
{
this.dead = true;

}

このコードは、背景のムービークリップ フレーム内に記述されます。

function moveEnemies():void
{
var tempEnemy:MovieClip;

for (var i:int =enemies.length-1; i>=0; i--)
{
    tempEnemy = enemies[i];
    if (tempEnemy.dead)
    {

        tempEnemy.gotoAndStop(21);
        var myTimer:Timer = new Timer(3000);
        myTimer.addEventListener(TimerEvent.TIMER, timerListener);
        myTimer.start();
}
}
}
function timerListener (e:TimerEvent):void
{

for (var i:int =enemies.length-1; i>=0; i--)
{
if (tempEnemy.dead)
{
    score++;
    roachLevel.score_txt.text = String(score);
removeEnemy(i);

}


}
}
function removeEnemy(id:int)
{

removeChild(enemies[id]);
enemies.splice(id,1);
}

これで私が経験している問題は、昆虫をクリックするたびにそこにとどまることです。そこにとどまる別のものをクリックします。それから別の、そしてしばらくすると消えてスコアが上がります。たまにデスフレームが出現せず、触れただけで死んでしまいます。これを解決する方法を教えてください。

4

1 に答える 1

0

敵クラスに追加するスコアを再配置し、基本クラスの代わりに特定の押しつぶされた敵にタイムアウトを割り当てる必要があります。それを行うのに最適な場所はkill()機能です。

function kill(e:MouseEvent):void {
    this.dead=true;
    gotoAndStop(21);
    flash.utils.setTimeout(removeSelf,3000);
}
function removeSelf():void {
    this.parent.removeChild(this);
}

次に、オブジェクトのスコアリングと追跡のメカニズムを調整します。まず、オブジェクトがdeadになった場合、すぐに敵の配列から削除し (オブジェクトの削除は独自に処理します)、スコアを与えます。そして第二に、他のすべての機能を維持する必要があります。

for (var i:int=enemies.length-1;i>=0;i--) {
    var tempEnemy=enemies[i];
    if (tempEnemy.dead) {
        score++;
        enemies.splice(i,1);
    } else {
        tempEnemy.y++; // or other move function
    }
}

このループは enterframe リスナーにある必要があるため、フレームごとに 1 回呼び出されます。また、このようにスプライシングと移動を組み合わせることで、とにかく配列を反復処理するため、移動コードを別の場所に配置する必要がなくなります。

于 2013-10-16T04:42:28.490 に答える