【问题标题】:SpriteKit: I'd need something like .pauseActionForKey()?SpriteKit:我需要类似 .pauseActionForKey() 的东西吗?
【发布时间】:2015-06-18 10:22:46
【问题描述】:

我对如何解决以下问题有点困惑:

我的滚动游戏会生成从 plist 加载的各种障碍物。生成由 SKAction 延迟,每个障碍物的持续时间由 y 位置计算。

更新以反映 Wraithseeker 的回答。

这是设置代码,其中所有计时器都在 didMoveToView():

for obstacleTuple in level.obstacleTuples {
  let positionY = obstacleTuple.positionY
  let obstacle = obstacleTuple.obstacle as! SKNode

  let duration = NSTimeInterval(positionY / kObstacleDistancePerSec)

  // **Update**: Instead of running the wait action on the scene...
  //runAction(SKAction.waitForDuration(duration), completion: {
  // I should run it on the foregroundNode...
  foregroundNode.runAction(SKAction.waitForDuration(duration), completion: {
    self.foregroundNode.addChild(obstacle)
  })
}


// And then toggle the pause property on that node to stop and resume.
let foregroundNode.paused = foregroundNode.paused == true ? false : true

我想要一些特殊事件(根据用户操作发生),在此期间上述障碍物的生成会进一步延迟,玩家可以收集奖励对象。 所以基本上,我需要为等待 SKAction 分配一个键,然后使用 .pauseActionForKey() 方法(而不是 .removeActionForKey())。

是否可以扩展SKAction? 有没有更好的方法来实现我想要做的事情?

【问题讨论】:

  • 您是在问如何暂停节点及其当前操作吗?
  • 不,在这里使用 pause 属性没有帮助,因为等待操作继续运行。考虑一下,也许我应该在障碍物而不是场景上运行 wait SKAction。但即便如此,我可以在尚未添加的节点上使用 pause 属性吗?我会尽快尝试。

标签: swift sprite-kit skaction


【解决方案1】:

解决此问题的一种方法是创建一个空的SKNode 并将这些操作分配给您要暂停的那个节点。这样当您暂停动作时,它不会暂停您的整个游戏,因为您正在使用 selfSKActions 分配给当前场景。

要暂停操作,只需按照 sangony 的建议在空的 SKNode 上调用 pause。

一个例子

myEmptyNode.pause() //

【讨论】:

  • 感谢 Wraithseeker,我应该在 foregroundNode 上运行等待操作并暂停该节点以实现我想要的。我已经更新了代码。
猜你喜欢
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 2014-09-22
  • 2010-11-29
  • 2020-03-26
相关资源
最近更新 更多