2015-06-18 26 views
0

如果我的屏幕頂部有一個男人,還有一個後來進入底部的夥計,我希望他們都使用我創建的moveToLeftOfScreen動作移動到屏幕左側,如何我要這樣做嗎?如何將一個動作應用於SpriteKit中的多個Sprites?

如果我有var moveToLeftOfScreen = SKAction.moveTo(CGPoint(x:blhabhla, y:bhlahbla, duration: 3)),它不允許東西從它產生的地方沿着一條直線向左移動。

長話短說:你能做出一個動作,說「移動到左邊,直到你打在屏幕上,然後搬回到右邊,直到你打在屏幕上」並應用到的東西在不同的產卵不同時間的位置,然後只需在整個代碼中應用該操作,而不是爲每個高度編寫不同的操作。

+0

總之,不,你不能。你仍然需要有一個觸發器來做別的事情。如果你沒有定義那個觸發器,你的代碼就會毫無用處。 – sangony

回答

0

與sangony相反,我會認爲這是非常可能的,雖然我可能會錯過一些東西。

您是否可以不創建對SKAction的引用,該引用是一個移動到X = 0並移動到X = size.width?的序列。如果永遠重複。

我不在我的Mac附近,所以我不能在XCode中獲得完美的語法,因此對任何錯誤表示歉意。另外這個假設場景將創建此引用,因此self.size.width

let moveLeft = SKAction.moveToX(0, duration: 3) 
let moveRight = SKAction.moveToX(self.size.width, duration: 3) 
let moveLeftThenRight = SKAction.sequence([moveLeft, moveRight]) 
let continousMovement = SKAction.repeatActionForever(moveLeftThenRight) 

應用到派生的任何節點是最後的行動,你應該確定,如果我理解正確。

第一個移動速度很慢,因爲無論節點產生的位置總是需要3秒才能移動到左側。這可以通過固定得到它需要移動的距離的分數,乘以3:

let firstMovementDuration = (node.position.x/self.size.width) * 3 
let firstMoveLeft = SKAction.moveToX(0, duration: firstMovementDuration) 

從那裏繼續正常運動。還有timingMode考慮更自然的運動,如.EaseInEaseOut

+0

非常感謝!感謝您抽出寶貴時間輸入。 我甚至沒有意識到只有moveToX vs moveTo(品牌嶄新編碼)哈哈......現在很明顯。 耶和好是偉大的想法與乘法。 有一個好的! – Noowoo

相關問題