gpt4 book ai didi

objective-c - NSTimer还是暂停操作?

转载 作者:行者123 更新时间:2023-12-01 16:59:22 25 4
gpt4 key购买 nike

首先,我一般对编程还是比较陌生的。对Objective C和IOS编程来说是非常新的。这只是我正在学习学习的一种实践编程。

它的基本作用是:

计算机选择攻击次数,然后随机选择1到4或0到3之间的数字(真的没关系)。每次经过for循环时,它都会执行此操作。

我想要完成的是:

如果计算机选择0,则它将突出显示适当的按钮并使用户可以与之交互,但它们只有一定时间才能按下该按钮。计时器被称为取消突出显示按钮并使之处于非 Activity 状态的函数。

所有这些都有效,但是所有这些都同时发生。如果计算机遭受了三次攻击,则同时突出显示并激活所有三个按钮,然后同时将其禁用。我想让程序暂停一段时间,以使播放器有足够的时间按下按钮。我无法弄清楚这部分。我想到了使用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]];
}
}

}

}

最佳答案

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

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

因此,您将发起3次攻击的序列,将remainingAttack实例变量设置为3,调用performAttack方法,该方法将检查是否还有待执行的攻击,是否进行了攻击(或者您想从计时器中进行攻击)回调),将攻击次数降低1(或从计时器回调),启动计时器。
在计时器callBack中执行您的逻辑,然后再次调用performAttack作为计时器的最后一项操作。
那将是我现在可以想到的基本逻辑,您将不得不使其适应您的个人需求,并且可能会有更好的解决方案。但这是一个。

关于objective-c - NSTimer还是暂停操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8606107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com