我构建了一个基本的avoider游戏。当我在iOS中运行游戏时,我遇到了setInterval或setTimeout的问题(我尝试了这两种方法)。奇怪的是,它作为一个.swf或.apk工作正常,但不是在iOS中。我发现问题与setTimeout/setInterval有关。iOS中的setInterval/setTimeout问题
我有一个文档类控制真实显示的内容一样,教程,1级屏幕,水平屏幕,等它是这样的:
public function DocumentClass()
{
menuScreen = new MenuScreen();
menuScreen.addEventListener(NavigationEvent.START, onRequestStart);
menuScreen.addEventListener(NavigationEvent.CREDI, onRequestCredits);
addChild(menuScreen);
}
public function onRequestStart(navigationEvent:NavigationEvent):void
{
tut = new Tutorial();
tut.addEventListener(NavigationEvent.NEXT, onRequestNext);
addChild(tut);
menuScreen.removeEventListener(NavigationEvent.START, onRequestStart);
menuScreen.removeEventListener(NavigationEvent.CREDI, onRequestCredits);
removeChild(menuScreen);
menuScreen = null;
}
它去总是这样,去掉最后屏幕和听众,并弹出新的屏幕,为不同的级别或信息屏幕。
在我发现该错误的类中,我使用了一个Timer,主要用于交互目的和敌方世代。 类似这样的:
public function onTick(timerEvent:TimerEvent):void
{
if (Math.random() < 0.02){
enemySpot();
}
}
public function enemySpot()
{
var enemySpot = new EnemySpot(posX[incDec], posY[incDec])
spots.push(enemySpot);
addChild(enemySpot);
enemyBorn = setTimeout(enemyGenerator, 1000);
}
public function enemyGenerator()
{
enemy = new Enemy(posX[incDec], posY[incDec])
army.push(enemy);
addChild(enemy);
removeEnemy = setTimeout(enemyRemoval, 6000);
incDec = incDec + 1;
clearTimeout(enemyBorn);
}
public function enemyRemoval()
{
for each (var elem:Bola in army)
{
removeChild(elem);
elem = null;
army.reverse();
army.pop();
army.reverse();
clearTimeout(removeEnemy);
break
}
}
它可以正常工作,直到玩家击中敌人。
if (avatarHasBeenHit)
{
avatar.alpha = 0;
avatar.stopDrag();
if (bol2)
{
aDeath = new avatarDeath();//just an animation, of the avatar dyeing
addChild(aDeath);
aDeath.x = avatar.x;
aDeath.y = avatar.y;
uniTimer1 = getTimer();
bol2 = false;
}
goNext = setInterval(leaveScreen,1500);
}
public function leaveScreen()
{
gameTimer.stop();
dispatchEvent(new AvatarEvent(AvatarEvent.DEAD));
clearInterval(goNext);
}
一旦玩家击中的敌人,游戏停止产生的下一个水平,这是在不同的类文件的敌人。它是这样的: 阿凡达击中敌人 - > dispatch AvatarEvent.DEAD; DocumentClass移除关卡画面的孩子,并将孩子与下一个关卡画面进行部署,这些关卡具有与前一关卡相同的结构,不知何故setTimeout获胜,因此没有新的敌人。但它在swf和apk文件上工作正常!任何想法是什么造成这个问题? 在此先感谢
我从来没有在iOS上使用setTimeout,所以我不能确认它是否是一个错误或限制的软件,但如果你真的卡住了,你可以使用'Timer'代替,我已经使用Timer类之前的iOS。 – BadFeelingAboutThis 2013-05-07 16:40:55
我有使用setTimeout它工作正常,简单但有效 – joshua 2013-05-08 13:17:19
可能混合Timer和setTimeout/setInterval导致iOS中的某种错误。我可以真正得出结论,因为这是我第一次尝试iOS。无论如何,我通过只使用Timer + getTimer()来解决这个问题,避免了任何间隔/超时。感谢您的提示 – pipoca 2013-05-10 18:12:57