【发布时间】:2016-12-29 05:41:47
【问题描述】:
我在GameViewController的乒乓球比赛中有以下代码:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: self)
main.run(SKAction.moveTo(x: location.x,duration: 4), completion: {
print( "COMPLETED TOUCH BEGAN")
})
}
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: self)
main.run(SKAction.moveTo(x: location.x,duration: 1), completion: {
print( "COMPLETED TOUCH MOVED")
})
}
}
由于某种原因,当touchesBegan的持续时间大于touchesMoved的持续时间时,我的玩家会先完成touchesMoved的动作(尽管touchesBegan必须先来),然后跳转到一个不同的 x 位置,然后以持续时间 4 移动以完成 touchesBegan。这几乎就像玩家到达touchesMoved 中指定的位置(这应该与touchesBegan 中的位置几乎完全相同),返回一个稍微任意的量,然后移动到touchesBegan 位置。它为什么会跳回来然后像这样移动是有原因的吗?
我的假设是,出于某种原因,touchesMoved 动作同时运行,当它们完成时,位置跳回到它在touchesBegan 中缓慢移动的位置并完成该动作直到完成 - 几乎就像有两个物体以不同的速度移动,较慢的物体在较快的物体完成后出现。这完全正确吗?如果有,为什么会这样?
编辑:
我看到当我让桨移动到屏幕的一侧,然后点击屏幕的另一端并滑过去,它会移动到我释放的最终位置,然后跳转并移动到我第一次按下的地方。这几乎就像第一个动作在后台播放一样。奇怪的是,如果我按住手指(保持touchesMoved 方法被调用)直到touchesBegan 中的移动完成(所以这里是4 秒),它不会跳到屏幕的另一边!
总之,我有多个 SKAction 以不同的持续时间运行,根据我的观察,优先级高于添加到操作数组中的最新操作。但不是相互播放多个动作,而是对象跳转到屏幕上的不同位置以完成最终动作。
【问题讨论】:
-
你想达到什么目的?您在很短的时间内创建了许多相互冲突的操作。
-
@nathan 我实际上和this tutorial 一起关注并认为他所做的事情是正常的。我对 SpriteKit 完全陌生。不管怎样,我现在很好奇到底发生了什么。
标签: swift