我有一個乒乓槳比賽中下面的代碼GameViewController
:SKAction的不同持續時間 - 動作完成後跳過?
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秒),它不會跳到屏幕的另一側!
綜上所述,筆者有不同的持續時間運行多個SKActions,從我的觀察,當務之急是在附加到行動陣列的最新動作。但不是在對方播放多個動作,而是跳轉到屏幕上的不同位置以完成最終動作。
你到底想達到什麼目的?你在很短的時間內製造了許多相互衝突的行爲。 – nathan
@nathan我實際上是跟着[本教程](https://youtu.be/LdL99CH23E8?t=15m8s),並認爲他在做什麼是正常的。我對SpriteKit完全陌生。無論哪種方式,我現在很好奇到底發生了什麼。 – rb612