【问题标题】:Stop / Pause .runActionForever() SCNAction停止/暂停 .runActionForever() SCNAction
【发布时间】:2015-06-25 04:08:03
【问题描述】:

如何在没有密钥的情况下暂停或停止由.runActionForever() 调用的 SCNAction?我看到了使用 node.removeActionForKey("action") 的选项,但我的 SCNAction 没有密钥。这就是我创建它的方式:

var turnAction = SCNAction.rotateByX(0, y: 1, z: 0, duration: 1)

...以及如何使用:

node.runAction(SCNAction.repeatActionForever(turnAction))

我尝试了什么

我知道有 node.removeActionForKey("action") 方法,但是当我为我的 SCNAction 创建一个 keyValue 时,它​​会变成 void 并且不能再与 .repeatActionForever() 一起使用。

我怎样才能阻止它?
在此先感谢:)

【问题讨论】:

  • 在 SpriteKit(不确定 SceneKit)中,您有 runAction(act, withKey: key) 这将创建密钥,您可以稍后使用其密钥删除该操作。
  • 酷,谢谢。我这样使用它:node.runAction(SCNAction.repeatActionForever(action), forKey: "action") 然后停止它:node.removeActionForKey("action")。如果您将您的想法作为答案发布,我将很乐意接受。你可以在那里实现我的代码;)

标签: ios swift animation scenekit


【解决方案1】:

你只需给节点另一个动作,前一个动作就会停止。你可以告诉你的节点旋转 0 (所以什么都不会发生)。执行以下操作:

nodeName.runAction(SCNAction.rotateByX(0,y:0,z:0), duration: 1)

【讨论】:

  • 这在使用 CAAnimation 时会起作用,但 SKActions 不同。
【解决方案2】:

要使用键添加操作,请使用

SCNNode.runAction(SCNAction, forKey: String)

方法。

现在您可以通过该键删除特定操作

SCNNode.removeAction(forKey: String)

【讨论】:

  • 虽然它是一个 SCNAction... - SceneKit
  • SCNNode 仍然有 runActionForKeyremoveActionForKey,就像 SKNode 一样。请参阅SCNActionable 协议的文档。
【解决方案3】:

如果要结束并删除节点中的所有操作,只需使用以下代码:

node.removeAllActions()

【讨论】:

    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多