Swift 为什么在我的update()方法中多次调用runAction()函数?
在Sprite Kit中的Swift 为什么在我的update()方法中多次调用runAction()函数?,swift,sprite-kit,Swift,Sprite Kit,在Sprite Kit中的func update(currentTime:CFTimeInterval)方法中,我有一个gameTicker,它在每次游戏更新时递增一个整数 当gameTicker可被500整除时,我暂停该代码,通过删除didMoveToView()中调用的原始操作来禁止敌人繁殖,并启动一个作为短暂延迟的nextLevelDelayTicker。一旦nextLevelDelayTicker达到100,我开始再次增加原始的gameTicker,将nextLevelDelayTick
func update(currentTime:CFTimeInterval)
方法中,我有一个gameTicker
,它在每次游戏更新时递增一个整数
当gameTicker
可被500整除时,我暂停该代码,通过删除didMoveToView()
中调用的原始操作来禁止敌人繁殖,并启动一个作为短暂延迟的nextLevelDelayTicker
。一旦nextLevelDelayTicker
达到100
,我开始再次增加原始的gameTicker
,将nextLevelDelayTicker
重置为0,然后运行一个动作再次开始繁殖敌人
基本上,一旦nextLevelDelayTicker
等于100
,我只想运行一次条件的内容。我在其中添加了一个print(“yolo”)
,以查看在满足条件时是否只调用了一次,而且确实是这样。但是,由于某些原因,runAction(spawnAction,带键:“spawnAction”)
被多次调用。只要满足self.nextLevelDelayTicker.getTimePassed()==100的条件,就会在很短的时间内产生大量的敌人
如何多次调用runAction(spawnAction,带key:“spawnAction”)
,但只调用一次print(“yolo”)
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
if gameTicker.isActive == true {
gameTicker.increment()
}
// If gameTicker is equal to 5 seconds, increase enemy amount
if gameTicker.getTimePassed() % 500 == 0 {
self.enemyAmount += 1
self.removeActionForKey("spawnAction")
gameTicker.isActive = false
}
// If level has been completed and last ghost has been killed, activate next level scene
if gameTicker.isActive == false && enemyArray.count == 0 {
self.nextLevelDelayTicker.increment()
if self.nextLevelDelayTicker.getTimePassed() == 100 {
print("YOLO")
self.gameTicker.isActive = true
self.nextLevelDelayTicker.reset()
let spawnAction = SKAction.repeatActionForever(
SKAction.sequence([
SKAction.waitForDuration(2),
SKAction.runBlock({
[unowned self] in
self.spawnEnemy()
})
])
)
runAction(spawnAction, withKey: "spawnAction")
}
}
}
原来我是个渡渡鸟头<代码>运行操作(spawnAction,withKey:“spawnAction”)没有被多次调用,它是:
if gameTicker.getTimePassed() % 500 == 0 {
self.enemyAmount += 1
self.removeActionForKey("spawnAction")
gameTicker.isActive = false
}
被多次调用,将大量敌人添加到self.enemyAmount
全局变量,该变量用于确定运行spawnAction
时有多少敌人产卵
我在条件中添加了一个标志,每个关卡周期只调用一次,而每个游戏周期大约调用300次:
if gameTicker.getTimePassed() % 500 == 0 && gameTicker.isActive == true{
self.enemyAmount += 1
self.removeActionForKey("spawnAction")
gameTicker.isActive = false
print("STOP SPAWNING")
}