[英]How to change wait for duration SKAction ran by an SKScene?
在我的 SpriteKit 项目中,我有一个spawnEnemy
方法。 我希望这个方法被一遍又一遍地调用,以便敌人在整个游戏中继续产生。
我所做的就是将spawnEnemy
方法放在SKAction runBlock
中,并让我的SKScene
永远运行该操作,并在调用之间延迟(以防止应用程序过载)。
以下是相关代码的片段:
var _spawnSpeedSeconds: Double = 2.0
func startSpawning()
{
let waitForXSeconds = SKAction.waitForDuration(self._spawnSpeedSeconds)
let spawn = SKAction.runBlock({ () -> Void in
self.spawnEnemy()
})
self.runAction(SKAction.repeatActionForever(SKAction.sequence([spawn, waitForXSeconds])), withKey: "spawnEnemy")
}
func spawnEnemy()
{
...
}
现在经过一段时间后(例如当玩家获得 5 分或其他东西时),我会降低 _spawnSpeedSeconds 以使敌人在更短的时间内产生更多以增加难度。
问题是,即使我减少了我的 _spawnSpeedSeconds 变量,SKScene 运行的生成动作的延迟仍然是相同的。
我能想到的解决此问题的唯一方法是删除该动作,然后以新的延迟/生成率重新添加该动作。 有没有更好的方法来解决这个问题?
谢谢
在这种情况下,请勿使用动作。 它们实际上并不是以动态方式工作的。 一旦设置好它们,它们就会卡住。 只需使用您的更新方法。
我将向您展示如何定期发射导弹:
首先在课堂上设置两个计时器
var missleTimer:NSTimeInterval = NSTimeInterval(2)
var missleInterval:NSTimeInterval = NSTimeInterval(2)
现在,在我们的更新方法中,我们倒计时并生成导弹
// subtract time from our timer
self.missleTimer -= self.delta
// when our timer reaches zero
if self.missleTimer <= 0 {
// run your spawning code
self.launchMissle()
// reset timer
self.missleTimer = self.missleInterval
}
这比在这种情况下使用操作要好,因为我可以在代码中的任何地方设置missleInterval
,并且更改始终会得到反映。
-(void)recursiveMethod
{
if(shouldSpawnEnemy)
{
_spawnSpeedSeconds -= 0.01;
SKAction *wait = [SKAction waitForDuration: 0.5];
SKAction *action = [SKAction performSelector:@selector(recursiveMethod) onTarget:self];
SKAction *sequence = [SKAction sequence:@[wait,action]];
[self repeatActionForever:sequence];
}
}
要开始生成敌人时,请记住调用recursiveMethod。 希望能有所帮助。
提供 swift 解决方案,无需计时器,使用带有断路器标志的递归:
class YourScene: SKScene {
var gameOver: Bool = false
func spawnEnemies() {
let waitAction = SKAction.wait(forDuration: yourDynamicDurationHere)
self.run(SKAction.sequence([SKAction.run(self.spawnEnemy), waitAction])) {
if !gameOver {
spawnEnemies()
}
}
}
}
该解决方案利用run
方法的完成处理程序递归地安排序列的另一个执行。 由于每个单独的SKSequence
都是在执行之前创建的,因此我们可以为每次迭代传递不同的等待时间。
要停止递归循环,只需设置gameOver
= true。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.