【问题标题】:Skipping SKActions跳过 SKAction
【发布时间】:2016-03-06 01:37:04
【问题描述】:

在我的场景开始时,我运行了一系列不同的动作作为关卡的介绍。我想让它被用户跳过。有没有办法用 SKAction 处理这个问题? SKAction 是我的赌注,但也许有更好的方法来做到这一点。有什么想法吗?

【问题讨论】:

  • skippable... 如果您的意思是在屏幕上点击并且动作完成,那么您需要记住这些动作是什么,并且在触摸时只需终止所有当前动作并重新运行它们,持续时间为 0 (或者只是手动设置完整事件),如果您只想停止所有操作,那么您可以删除它们。最好的方法,给你的操作键,然后打电话给removeActionForKey 不确定是否还有其他需要,这就是为什么我没有回答这个问题。
  • 那是天才...我从没想过以 0 的持续时间运行它们。回答我会接受。谢谢老兄!

标签: macos sprite-kit skaction


【解决方案1】:

这假设您希望点击停止操作:

一种非常简单但可能不稳定的方法是将运行动作的节点的速度提高到一个非常高的数字,只要记住在需要节点时重置它。

一种更稳定的简单方法是保存您的操作并以零持续时间重新应用它们。

最好的方法是为您的SKActions 创建一个Dictionary,如下所示:

var actionDict = [String,SKAction]()

然后只需使用密钥保存所有操作,以便将来访问它:

actionDict["moveUp"] = SKAction.moveToY(100,duration:100)

既然你有它的键,运行你的动作时,只需分配相同的键:

node.runAction(actionDict["moveUp"],withKey:"moveUp")

然后当你需要结束它时,只需删除所需的操作:

node.removeActionForKey("moveUp")

并以 0 的持续时间重新申请:

//if we want to retain the old duration, use copy
let action = actionDict["moveUp"].copy()
action.duration = 0
node.runAction(action,withKey:"moveUp")

注意,这个方法只适用于动作在做To事件的情况下,如果是做By事件,你需要弄清楚最终的目的地点,并使其成为一个持续时间为0的moveToa

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2013-10-10
    • 1970-01-01
    相关资源
    最近更新 更多