2016-01-04 14 views
6

Mam następujący kod, aby przenieść SKSpriteNode.Zatrzymaj SKAction w Spritekit ze Swiftem

let moveDown = SKAction.moveBy(CGVectorMake(0, -120), duration: 1) 
let moveUp = SKAction.moveBy(CGVectorMake(0, +120), duration: 1) 
let moveSequence = SKAction.sequence([moveDown, moveUp]) 
square.runAction(SKAction.repeatActionForever(moveSequence)) 

Przenosi to SKSpriteNode w górę iw dół na zawsze. Czy istnieje sposób, aby zatrzymać to SKAction? Aby SKSpriteNode zawiesił się w aktualnej pozycji, a później, gdy zdecyduję, kontynuować jego ruch?

Chcę tylko wstrzymać ruch tego SKSpriteNode. Nie chcę wstrzymywać SKScene. Wystarczy ruch tego 1 SKSpriteNode

Odpowiedz

5

Należy uruchomić akcję z kluczem:

square.runAction(SKAction.repeatActionForever(moveSequence), withKey:"moving") 

Następnie nieruchomość prędkość Działanie w, aby ją wstrzymać:

if let action = square.actionForKey("moving") { 

     action.speed = 0  
} 

lub je wznowić:

action.speed = 1 
+0

Dzięki whirlwind! Działa świetnie. Jeśli mam grupę SKSpriteNodes, powiedzmy 5 z nich. Jaki jest najlepszy sposób użycia właściwości prędkości działania, aby zatrzymać je wszystkie? Próbowałem użyć klawisza "przenoszenie" na wszystkich z nich, ale zatrzymuje się tylko jeden z SKSpriteNodes :) – Questions

+0

@Questions Najpierw nazwij wszystkie węzły kwadratowe (np. Square.name = "square"), a następnie uruchom [enumerateChildNodesWithName] (http : //stackoverflow.com/q/24213436/3402095), aby uzyskać dostęp do każdego kwadratu według jego nazwy i zmienić jego akcję związaną z klawiszem "przenoszenie". – Whirlwind

6

Alternatywa odpowiedzi @Whirlwind, na wypadek gdybyś miał kilka akcji w razie potrzeby wstrzymania, które nie są w grupie, a nie tylko ruchu, jest po prostu wstrzymanie samego węzła. Wszystkie SKNodes mają przypisaną właściwość paused.

Przykł. square.paused = true

+0

Dzięki za alternatywę. Obydwie metody działały: D – Questions

Powiązane problemy