我有两个节点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
}
}
答案 0 :(得分:2)
touchesBegin只会触发一次,所以你的moveNode2 == 1将不会做任何事情。而不是使用moveBy,用户moveTo,并让node1移动到屏幕的中心 - node1宽度。然后只需将完成块添加到node1.run。
注意:您可能需要更改持续时间,而不确定这些数字的来源。如果您计划让用户不断点击屏幕,那么只需执行cmd
totalDuration = 3 * (node1.x - 'node1 start x')/((self.frame.width/2 - node1.frame.width) - 'node1 start x')