所以,这是有问题的代码:
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中开发
答案 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!