NSTimer还是暂停操作?

时间:2011-12-22 15:35:29

标签: objective-c ios nstimer

总的来说,我对编程很新。对Objective C和IOS编程非常新。这只是我正在编写的练习编程。

它的基本功能是:

计算机选择多次攻击,然后随机选择1到4或0到3之间的数字(实际上无关紧要)。它每次通过for循环时都会这样做。

我想要完成的是:

如果计算机选择0,则它会突出显示相应的按钮并使其激活以供用户进行交互,但他们只有一定的时间来按下所述按钮。计时器调用的功能是取消按下按钮并使其处于非活动状态。

这一切都有效,但这一切都在同一时间发生。如果计算机攻击三次,则所有三个按钮同时突出显示并激活,然后同时处于非活动状态。我想让程序暂停一段时间,让玩家有足够的时间按下按钮。我无法理解这一部分。我想过使用一个while循环,当按下按钮或定时器调用函数时它会启动,但这只会让它陷入while循环。我在第一个if语句中已经证明了这一点。

再次请保持简单,因为我对编程很新。感谢

if(theEnemy.attackingOrBlocking == 1)
{
    int whereAttack;
    int numberOfAttacks = 3; //theEnemy.numOfAttacks;
    for (int i = 0; i <= numberOfAttacks; i++)
    {
        whereAttack = theEnemy.attackButton;
        if (whereAttack == 0) 
        {
            while (buttonPushed == NO)
            {
                [NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(timerCallback) userInfo:nil repeats:NO];

                lowAttackBlock.userInteractionEnabled = YES;
                lowAttackBlock.highlighted = YES;
            }

        }
        if (whereAttack == 1)
        {
                [NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(timerCallback) userInfo:nil repeats:NO];

                leftAttackBlock.userInteractionEnabled = YES;
                leftAttackBlock.highlighted = YES;

        }
        if (whereAttack == 2)
        {
                [NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(timerCallback) userInfo:nil repeats:NO];

                rightAttackBlock.userInteractionEnabled = YES;
                rightAttackBlock.highlighted = YES;

        }
        if (whereAttack == 3)
        {
                [NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(timerCallback) userInfo:nil repeats:NO];

                highAttackBlock.userInteractionEnabled = YES;
                highAttackBlock.highlighted = YES;
        }
        if (myCharacter.block != whereAttack)
        {
            myCharacter.health -= 10;
            [yourHealth setText:[[NSString alloc] initWithFormat:@"%d",myCharacter.health]];
        }
    }

}

}

1 个答案:

答案 0 :(得分:0)

启动计时器是Asynchrone操作,因此它不会停止应用程序的正常流程,因此如果您处于启动3计时器的for循环中,for循环将在第一个计时器调用您之前完全执行背部。

这样做的方法是缓存一个实例变量中的命中数,每次调用一个计时器时,该变量将减少一个。

所以你启动一系列3次攻击,你将remainingAttack实例变量设置为3,调用方法performAttack来检查是否还有攻击,如果你执行了攻击(或者你想通过计时器回调执行它),将攻击次数减少1(或从计时器回调中减少),启动计时器。
在计时器中,callBack执行您的逻辑,然后再次调用performAttack作为计时器的最后一个动作 这将是我现在能想到的基本逻辑,你必须根据个人需要进行调整,并且可能有更好的解决方案。但那是一个。