gpt4 book ai didi

swift - 为什么在我的 update() 方法中多次调用 runAction() 函数?

转载 作者:行者123 更新时间:2023-11-30 13:39:56 27 4
gpt4 key购买 nike

在 Sprite Kit 中的 func update(currentTime: CFTimeInterval) 方法中,我有一个 gameTicker,每次游戏更新时它都会增加一个整数。

gameTicker 能被 500 整除时,我会暂停滚动条,通过删除 didMoveToView() 中调用的原始操作来禁止敌人生成,然后启动 >nextLevelDelayTicker 起到短暂延迟的作用。一旦 nextLevelDelayTicker 达到 100,我开始再次递增原始 gameTicker,将 nextLevelDelayTicker 重置为 0,然后运行再次开始生成敌人的 Action 。

基本上,一旦 nextLevelDelayTicker 等于 100,我只想运行条件条件的内容一次。我在其中添加了一个 print("yolo") 来查看它是否仅在满足条件时被调用一次,事实确实如此。但是,由于某种原因,runAction(spawnAction, withKey: "spawnAction") 被多次调用。一旦满足条件 self.nextLevelDelayTicker.getTimePassed() == 100,就会在很短的时间内产生大量敌人。

如何多次调用 runAction(spawnAction, withKey: "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")
}
}
}

最佳答案

原来我是个渡渡鸟头。 runAction(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")
}

关于swift - 为什么在我的 update() 方法中多次调用 runAction() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35692808/

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