0

したがって、これが問題のコードです。

function moveObsticle():void
    {
        //move
        var tempObs:MovieClip;
        for(var i:int = obsticles.length-1; i>=0; i--)
        {
            tempObs = obsticles[i];
            tempObs.y = tempObs.y - playerSpeed;
        }

        //test if obsticle is off-stage and set it to remove
        if (tempObs != null && tempObs.y < stage.stageHeight)
        {
            removeObsticle(i);
        }

        //player-obsticle colision
        if (tempObs != null && tempObs.hitTestObject(player))
        {
            gameState = STATE_END;
        }
    }

これは私のコードの moveX 関数の 1 つで、すべて同じ問題があります。したがって、この関数はプログラム (ゲーム) の開始時に完全に機能しますが、ゲームを 30 秒または 1 分間プレイした後、hitTestObject() が機能しなくなり、ゲームのすべてのゲームプレイ要素が失われます。

したがって、問題のコードは関数の最後の if ステートメントですが、mby a for ループも問題になるのではないかと疑っていますが、hitTest の if ステートメント (obs がオフステージかどうかをテストします...) は問題を解決します。うまく動作します。

このエラーは私を夢中にさせます。私はそのエラーでゲーム全体を開発しましたが、今はそれを取り除く時です。同じ問題を抱えている人を見つけることができず、以前にその問題が発生したことはありません.

コードは AIR for Android で実行され、全体は Adob​​e Flash Pro cs6 で開発されます。

4

2 に答える 2

0

この問題は、コードを次のように変更することで解決されました (アイデアは @jfgi から提供されました)。

function moveObsticle():void
    {
        //move
        var tempObs:MovieClip;
        for(var i:int = obsticles.length-1; i>=0; i--)
        {
            tempObs = obsticles[i];
            tempObs.y = tempObs.y - playerSpeed;

             //player-obsticle colision
             if (tempObs != null && tempObs.hitTestObject(player))
            {
            gameState = STATE_END;
            }
        }

        //test if obsticle is off-stage and set it to remove
        if (tempObs != null && tempObs.y < stage.stageHeight)
        {
            removeObsticle(i);
        }
    }

ありがとう@jfgi!

于 2013-07-01T17:18:05.030 に答える
0

このコードを次のように変更してみてください。

function moveObsticle():void
{
    //move
    var tempObs:MovieClip;
    for(var i:int = obsticles.length-1; i>=0; i--)
    {
        tempObs = obsticles[i];
        tempObs.y = tempObs.y - playerSpeed;

        //test if obsticle is off-stage and set it to remove
        if (tempObs != null && tempObs.y < stage.stageHeight)
        {
            removeObsticle(i);
            continue;
        }

        //player-obsticle colision
        if (tempObs != null && tempObs.hitTestObject(player))
        {
            gameState = STATE_END;
        }
    }
}
于 2013-07-01T13:34:07.010 に答える