spritekit 如何在两个不同的节点上转换两个 SKAction
Posted
技术标签:
【中文标题】spritekit 如何在两个不同的节点上转换两个 SKAction【英文标题】:spritekit how to transition two SKAction on two different nodes 【发布时间】:2016-12-06 09:46:02 【问题描述】:我有两个节点 node1 和 node2。 node1 位于位置 0。当我单击屏幕时,它会运行它的操作,直到它位于屏幕中间或用户将手指从屏幕上移开。一旦 node1 到达屏幕中间,它将停止,并且 node2 将运行它的操作。到目前为止,我的代码都是这样做的。
但是,为了让 node2 运行其操作,用户必须将手指从屏幕上移开并再次触摸它。我不希望这种情况发生。我希望 node2 的操作在 node1 完成后运行,而不需要用户从屏幕上移开手指。
基本上,用户按住屏幕 node1 运行它的动作完成,然后 node2 运行它的动作。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
let Node1Move=SKAction.moveBy(x:50,y:0,duration:0.6)
let node1rep=SKAction.repeatForever(Node1Move)
node1.run(node1rep)
if modeNode2==1
let node2move=SKAction.moveBy(x:-10,y:0,duration:0.9)
let node2Rep=SKAction.repeatForever(node2move)
node2.run(node2Rep)
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?)
node1.removeAllActions()
node2.removeAllActions()
override func update(_ currentTime: TimeInterval)
if node1.position.x+node1.frame.width > self.frame.width/2
node1.removeAllActions()
moveNode2=1
【问题讨论】:
我厌倦了将 node2 操作更新但没有用。 有一个序列动作,允许您在一个链中包含多个动作以一个接一个地运行。不确定这是否会有所帮助,所以不会将其作为答案,但请检查一下。 【参考方案1】:touchesBegin 只会触发一次,所以你的 moveNode2 == 1 不会做任何事情。而不是使用 moveBy,用户 moveTo,并让 node1 moveTo 到屏幕的中心 - node1 宽度。然后只需向 node1.run 添加一个完成块。
注意:您可能需要更改持续时间,但不确定这些数字来自何处。如果您打算让用户不断地点击屏幕,那么只需执行totalDuration = 3 * (node1.x - 'node1 start x')/((self.frame.width/2 - node1.frame.width) - 'node1 start x')
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
let Node1Move=SKAction.moveTo(x:self.frame.width/2 - node1.frame.width,y:0,duration:3.0)
node1.run(Node1Move)
let node2move=SKAction.moveBy(x:-10,y:0,duration:0.9)
let node2Rep=SKAction.repeatForever(node2move)
node2.run(node2Rep)
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?)
node1.removeAllActions()
node2.removeAllActions()
【讨论】:
以上是关于spritekit 如何在两个不同的节点上转换两个 SKAction的主要内容,如果未能解决你的问题,请参考以下文章