总的来说,我对编程很新。对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]];
}
}
}
}
答案 0 :(得分:0)
启动计时器是Asynchrone操作,因此它不会停止应用程序的正常流程,因此如果您处于启动3计时器的for循环中,for循环将在第一个计时器调用您之前完全执行背部。
这样做的方法是缓存一个实例变量中的命中数,每次调用一个计时器时,该变量将减少一个。
所以你启动一系列3次攻击,你将remainingAttack
实例变量设置为3,调用方法performAttack
来检查是否还有攻击,如果你执行了攻击(或者你想通过计时器回调执行它),将攻击次数减少1(或从计时器回调中减少),启动计时器。
在计时器中,callBack执行您的逻辑,然后再次调用performAttack
作为计时器的最后一个动作
这将是我现在能想到的基本逻辑,你必须根据个人需要进行调整,并且可能有更好的解决方案。但那是一个。