【问题标题】:how to make all long-duration skactions work at the same time not one after one如何使所有长时间的skactions同时工作而不是一个接一个
【发布时间】:2015-01-26 23:02:57
【问题描述】:

我正在研究 sprite kit,现在我想做的是我正在使用一个 for 循环并检查数组中有多少个 sknode,并使数组中的每个 sknode 执行一个持续很长时间的 skaction - 大概一个小时。但是,每次我这样做时,它只是对第一个 sknode 执行第一个 skaction,而不是其余的 sknode。我认为这是因为它正在等待第一个完成,然后在 for 循环中跳转到第二个。那么如何才能让它们同时执行操作呢?

【问题讨论】:

  • 发布您的代码。了解你的敌人:你可以独立运行 skaction,或者在一个序列动作中对它们进行排序。同一个动作只能在单个节点上运行,如果要复用该动作,则必须复制它,即:[myAction copy] 使用它的任何地方。

标签: ios sprite-kit skaction sknode


【解决方案1】:

这是一个例子:

for node in nodes {
    let action1 = SKAction()
    let action2 = SKAction()
    let action3 = SKAction()
    let group = SKAction.group([action1,action2,action3])

    node.removeActionForKey("group")
    node.runAction(group, withKey: "group")
}

您应该使用SKActiongroup: 方法使动作同时运行,然后通过调用runAction: 方法将它们添加到执行队列中。请注意,如果您有某个动作已经在运行,则在前一个动作完成之前不会开始执行,因此您必须通过调用 removeActionForKey: 方法来删​​除该动作

【讨论】:

  • 感谢您的代码,我认为它应该可以工作,但我不知道为什么它不工作。每次循环时,我都会将所有 skaction 放入一个数组中。然后在循环之后,我用 group 运行 skaction 以便它可以同时工作。但它只运行第一个动作。我不知道为什么。
  • 非常感谢。我已经解决了我的问题!但我有一个奇怪的问题。我相信这是因为我跑了 skactions 组。因为当我评论那行时,错误不会显示。错误是每次我的应用程序变得活跃时。我会做那些动作,对吧?但是当我试图删除一个正在执行操作的 SKNode 时(我有一个删除 SKNode 的手势)。我总是得到 NSRangeException 这可能是关于 for 循环的。但我不知道哪里出了问题,因为在该代码中,没有导致问题的 for 循环。
  • @zh_Vincent 删除节点时,尝试先调用node.removeAllActions(),然后再调用node.removeFromParent()
  • 我认为没关系,因为我可以删除之前执行过的操作的节点。但是每次在应用程序激活时调用该方法。它会崩溃。
猜你喜欢
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-27
相关资源
最近更新 更多