iOS中的setInterval / setTimeout问题

时间:2013-05-07 14:52:54

标签: ios actionscript-3 flash settimeout setinterval

我建立了一个基本的避免游戏。当我在iOS中运行游戏时,我遇到了setInterval或setTimeout的问题(我已尝试过两者)。奇怪的是,它可以作为.swf或.apk使用,但不适用于iOS。我发现问题与setTimeout / setInterval有关。

我有一个文档类来控制显示的内容,如教程,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;
}

总是这样,删除最后一个屏幕和听众,然后弹出新屏幕,显示不同级别或信息屏幕。

在我发现错误的课程中,我使用的是计时器,主要用于交互目的和敌人生成。 像这样:

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);
}

一旦玩家击中敌人,游戏就会停止在下一级别生成敌人,这些级别位于不同的类文件中。它是这样的: Avatar击中Enemy - &gt; dispatch AvatarEvent.DEAD; DocumentClass删除Level Screen子节点,并使用下一个Level Screen部署子节点,它具有与前一级别相同的结构,不知何故setTimeout赢了,所以没有新的敌人。但它在swf和apk文件上工作正常!有什么想法导致这个问题吗? 提前致谢

1 个答案:

答案 0 :(得分:0)

我猜这与你调用clearTimeout()有关。请注意,当setTimeout()完成并调用相关函数时,它返回的句柄不再有效。因此,当您使用clearTimeout(enemyBorn)时,您实际上正在清除removeEnemy的超时(与其他clearTimeout相同)。