好吧,我正在Swift 3遊樂場工作,只有當用戶的鼠標關閉時才需要將Sprite節點移動到某個點,並在發佈時停止。到目前爲止,我有:Swift 3 - 如何在布爾值爲真時移動精靈節點?
override func mouseDown(with event: NSEvent) {
mouseIsDown = true
}
override func mouseDragged(with event: NSEvent) {
}
override func mouseUp(with event: NSEvent) {
mouseIsDown = false
}
func moveGuy() {
let action = SKAction.move(to: CGPoint(x: size.width/2,y: 200), duration: 2)
action.timingMode = .easeInEaseOut
guy.run(action)
}
//UPDATE
override func update(_ currentTime: CFTimeInterval) {
if(mouseIsDown)
{
moveGuy()
}
}
這工作有點,但問題是隻有在我鬆開鼠標(mouseIsDown是假的),請問SKAction實際運行(順利)。我認爲這是因爲它被一次又一次地調用。
正常情況下,我會以小增量使用moveBy動作,但我需要我的節點移動到特定點。
如何讓我的節點只在鼠標關閉時才移動到某一點?
在update中運行'SKAction'是一個錯誤的方法(一般來說),尤其是在你的情況下,action的持續時間爲2秒,update:每秒執行60次。它不是高性能的,(也沒有意義),因爲您一次又一次地重新創建SKAction對象,以便將一個精靈從點A移動到點B.您需要並且應該爲此創建一個SKAction對象......就像下面@ nateslager的回答中所述。 – Whirlwind
當然,如果你正在執行像[導彈導彈](http://stackoverflow.com/a/36235426/3402095)的東西,你可能想要使用'update:'方法(不帶'SKActions')。如果您需要使節點從點A移動到點B,則操作更加方便。不過,關鍵是,不要將行爲置於'update:'方法中(以每幀的形式創建操作對象)。如果你仍然陷入困境,試着描述一切(例如,你的目標是否改變了它的位置,或者它是靜態的)並讓我知道...... – Whirlwind