as3 hitTestObject在一段时间后无法正常工作

时间:2013-07-01 10:10:02

标签: actionscript-3 flash flash-cs6 hittest

所以,这是有问题的代码:

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函数之一,它们都有同样的问题。 所以这个功能在程序开始时完美运行(游戏)但是在玩了30秒或一分钟的游戏之后,hitTestObject()就会停止工作,我的游戏就会失去所有游戏元素。

所以有问题的代码是一个函数末尾的if语句,但是我怀疑mby一个for循环也可能是个问题,但是ifT语句高于hitTest一个(测试是否是关闭阶段的... 。)工作得很好。

这个错误让我发疯了,我已经开发了一个带有错误的整个游戏,现在是时候摆脱它了,我找不到任何人有同样的问题,我以前从未遇到过这个问题。

代码在AIR for Android中运行,整个内容在Adobe Flash Pro cs6中开发

2 个答案:

答案 0 :(得分: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;
        }
    }
}

答案 1 :(得分:0)

通过将代码更改为以下内容解决了问题(Idea来自@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!