首先,总的来说,我对编程是相当陌生的。对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]];
}
}
}}
发布于 2011-12-22 23:55:12
启动计时器是一个异步操作,因此它不会停止应用程序的正常流程,因此,如果您处于启动3计时器的for循环中,则在第一个计时器回调之前,for循环将完全执行。
要做到这一点,一种方法是在实例变量中缓存命中次数,每次调用计时器时都会将命中次数减1。
因此,您发起了一系列3次攻击,您将remainingAttack实例变量设置为3,调用performAttack方法来检查是否还有攻击要做,如果有,则执行攻击(或者您希望从timer回调中执行攻击),将攻击次数减少1(或从timer回调中),启动计时器。
在定时器callBack中执行您的逻辑,然后再次调用performAttack作为定时器的最后一个操作。
这是我现在能想到的基本逻辑,你必须根据你的个人需求来调整它,而且可能会有更好的解决方案。但这只是其中之一。
https://stackoverflow.com/questions/8606107
复制相似问题