2016-01-04 6 views
6

के साथ स्प्राइटकिट में एक SKAction रोकें मेरे पास SKSpriteNode स्थानांतरित करने के लिए निम्न कोड है।स्विफ्ट

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)) 

यह SKSpriteNode ऊपर और नीचे हमेशा के लिए ले जाता है। क्या कोई तरीका है कि मैं इस SKAction को रोक सकता हूं? ताकि SKSpriteNode अपनी वर्तमान स्थिति में स्थिर हो जाए, और बाद में जब मैं फैसला करता हूं, तो अपना आंदोलन जारी रखें?

मैं केवल इस SKSpriteNode के आंदोलन को रोकना चाहता हूं। मैं SKScene को रोकना नहीं चाहता हूं। बस इस 1 SKSpriteNode

उत्तर

5

के आंदोलन आप कुंजी के साथ एक कार्रवाई चलाना चाहिए:

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

फिर, उपयोग कार्रवाई की गति संपत्ति रोकने के लिए:

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

     action.speed = 0  
} 

या उसे पुनः चलाना:

action.speed = 1 
+0

धन्यवाद वायुमंडल! अच्छी तरह से काम। अगर मेरे पास SKSpriteNodes का समूह है, तो उनमें से 5 कहें। उन सभी को रोकने के लिए एक्शन की गति संपत्ति का उपयोग करने का सबसे अच्छा तरीका क्या है? मैंने उन सभी पर "चलती" कुंजी का उपयोग करने की कोशिश की लेकिन यह केवल SKSpriteNodes में से एक को रोकता है :) – Questions

+0

@ क्वेस्टियंस फर्स्ट, सभी स्क्वायर नोड्स (जैसे। Square.name = "square") नाम दें, फिर [enumerateChildNodesWithName] चलाएं (http : //stackoverflow.com/q/24213436/3402095) प्रत्येक वर्ग को इसके नाम से एक्सेस करने के लिए विधि, और कुंजी "चलती" से जुड़ी अपनी क्रिया को बदलें। – Whirlwind

6

@ वाइरविंड के उत्तर का एक विकल्प, यदि आपके पास कार्यवाही का एक गुच्छा है किसी समूह में नहीं बल्कि रोके जाने की आवश्यकता पर, केवल नोड को रोकना है। सभी SKNodes में paused इससे जुड़ी संपत्ति है।

पूर्व। square.paused = true

+0

वैकल्पिक के लिए धन्यवाद। दोनों विधियों ने काम किया: डी – Questions