gpt4 book ai didi

iphone - Objective-c -> iPhone 设计 : delayed action

转载 作者:行者123 更新时间:2023-12-03 20:48:02 26 4
gpt4 key购买 nike

很抱歉打扰,但我有点麻烦,我想知道这里是否有人可以帮助我。

我目前正在设计一款游戏,其中敌人出现在屏幕左侧(超出边界)并移动到右侧。我使用了许多代码(这是使用 Sparrow Framework),当你击败敌人时,敌人的数量几乎会增加。即 1 级 -> 1 个敌人,2 级 -> 2 个敌人,3 级 -> 3 个敌人,等等...

我在制造敌人方面遇到了一些麻烦。我让它们出现在由随机数生成器选择的 5 个设置路径(NSMutableArray 中的路径号)中的 1 个上,但是它们经常出现在同一路径上,一个在另一个之上。

为了产生敌人,我运行了多种方法:addEnemy -> 产生敌人(动画),然后从左向右移动。onTouchEnemy -> 如果我触摸敌人,他们就会死亡。激活绘制敌人drawEnemies -> 调用 addEnemy 的次数等于你的等级。编码为:

for(int i = 0; i < level; i++){
[self performSelector:@selector(addEnemy) withObject:nil afterDelay:3.0];
}

是否有一种编程方法可以使激活“生产敌人”方法之间存在延迟?我尝试了这个 afterDelay,但由于某种原因,该程序只是忽略了 3 秒的延迟,并且只是一次性生成了所有敌人。这相当令人恼火,因为我希望它们以更有序的方式出现。

我感谢任何愿意帮助我的人。西卡托。

最佳答案

由于代码执行的方式,

performSelector:withObject:afterDelay: 似乎忽略了其延迟。该 for 循环几乎会立即迭代,对 addEnemy 方法的 3 个调用进行排队。 3 秒后,addEnemy 方法几乎同时执行。

为了获得更好的结果,您应该查看NSTimer。您可以设置 3 秒的间隔并让它重复(您可以在产生所需数量的敌人后使计时器无效)。

类似于:

// creates and returns a new timer
// the timer is retained by the run loop for as long as it is valid
// invalidating the timer will cause the runloop to release it.
myTimer = [NSTimer scheduledTimerWithTimeInterval:3.0
target:self
selector:@selector(addEnemy)
userInfo:nil
repeats:YES];

这将导致 addEnemy 方法每 3 秒触发一次。你应该记录一下你已经制造了多少个敌人,在制造完最后一个敌人后,停止计时器,这样它就不会再次射击。

if (numberOfDesiredEnemies == numberOfEnemiesProduced)
{
[myTimer invalidate], timer = nil;
}

关于iphone - Objective-c -> iPhone 设计 : delayed action,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3778976/

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