2014-11-05 10 views
12

में GameScene.swift और GameScene.sks फ़ाइलों के बीच क्या संबंध है, मैं स्प्राइटकिट के साथ खेल रहा हूं, और कोड से इसे ड्राइव करने के तरीके के बारे में एक सुंदर सभ्य अनुभव प्राप्त कर रहा हूं, लेकिन मैं स्तर संपादक द्वारा बहुत परेशान हूं एक्सकोड 6 में शामिल है।SpriteKit टेम्पलेट

मैंने wwdc वीडियो ("प्लेटफॉर्म स्टेट यूनियन" और "स्प्राइटकिट में नया क्या है") देखा है, और वेब के चारों ओर खरोंच किया है, लेकिन इसके बारे में अधिक जानकारी नहीं मिली है स्तर संपादक, और यह वास्तव में क्या कर रहा है।

जो मुझे समझ में नहीं आता है, यह है कि टेम्पलेट सेट की गई दो फाइलें कैसे संबंधित हैं? क्या .sks GameScene.swift फ़ाइल की अभिव्यक्ति फ़ाइल करता है, या शायद गेमसेन क्लास में यह शामिल है?

या क्या वे दोनों एक ही दृश्य में एक साथ खेलने के लिए अलग-अलग ऑब्जेक्ट्स/नोड्स धारण करते हैं?

या (यह मेरा सबसे अच्छा स्पष्टीकरण है) .sks फ़ाइल और संपादक मूल रूप से पर्यावरण बनाने के लिए उत्तरदायी पात्र "लाइव" होने जा रहे हैं? यदि यह सच है, तो .swift फ़ाइल में मेरा कोड .sks फ़ाइल में क्या है उससे संबंधित है?

उत्तर

23

.sks फ़ाइल आपके दृश्य की सामग्री का एक स्थिर संग्रह है। यदि आपने पहले यूआई ऐप्स सेट अप करने के लिए इंटरफेस बिल्डर का उपयोग किया है, तो यह एक ही विचार है, अगर कार्यान्वयन में अलग है।

एक यूआई ऐप्स में, आप कोड में सब कुछ कर सकता है:

override func viewDidLoad() { 
    let someText = UITextField(...) 
    let aButton = UIButton(...) 
    // ... position everything 
    // ... style everything 
    // ... etc ... 
} 

या आप आईबी में सभी स्थैतिक सामग्री सेटअप (एक xib या स्टोरीबोर्ड) कर सकता है, और केवल गतिशील स्थापित करने के लिए कोड का उपयोग आपके ऐप का व्यवहार - चीजें जो तब होती हैं जब कोई उन बटन को छूना शुरू करता है। जब आप ऐसा करते हैं, तो दृश्य नियंत्रक जिसे आप कोड लिखते हैं, xib/storyboard में प्रॉक्सी ऑब्जेक्ट के रूप में मौजूद है, जो आपने आईबी में सेट अप और जो कोड में सेट अप किया है, उसके बीच एक पुल बना रहा है।

स्प्राइटकिट में, आपके पास वही विकल्प है। यहां तक ​​कि इससे पहले कि आप एक खेल में बनाने के लिए कोड जोड़ना शुरू (इनपुट से निपटने -

override func didMoveToView(view: SKView) { 
    let player = PlumberSprite(color: .Red) 
    player.position = // ... 
    player.physicsBody = // ... 
    self.addChild(player) 
    let ground = SKSpriteNode(...) 
    ground.position = // ... 
    ground.physicsBody = // ... 
    self.addChild(ground) 
    let block = QuestionBlockSprite() 
    block.position = // ... 
    block.physicsBody = // ... 
    block.contents = CoinSprite() 
    self.addChild(block) 
    // ... etc etc etc ... 
} 

क्या अंततः एक ग्राफिकल, स्थिर दृश्य है के लिए कोड का एक बहुत है कि: Xcode 6 से पहले, कई एसके खेल सभी कोड दृष्टिकोण लिया , दुश्मन व्यवहार, भौतिकी कॉलबैक जो स्कोर बढ़ाते हैं या खेल पर जाते हैं, आदि)। और यह डिज़ाइन के लिए खुद को उधार नहीं देता है जहां आप सामग्री से सामान्य गेम तर्क को विभाजित करते हैं, इसलिए आपके गेम में कई स्तर जोड़ना कठिन होता है।

इसके बजाय, आप अपनी स्थिर सामग्री (स्तर) बनाने के लिए एक्सकोड में स्प्राइटकिट संपादक का उपयोग कर सकते हैं, और गतिशील व्यवहार और गेम तर्क के लिए कोड पर चिपके रह सकते हैं। जैसे, आईबी में, व्यू कंट्रोलर आपके स्टोरीबोर्ड और आपके कोड के बीच एक पुल है, आपकी दृश्य कक्षा (GameScene.swift टेम्पलेट में) संपादक और कोड के बीच पुल है। जब आप रन टाइम पर .sks फ़ाइल लोड करते हैं (इसके लिए कोड GameViewController.swift टेम्पलेट में है), यह आपके GameScene वर्ग का एक उदाहरण बन जाता है, और संपादक में सेट की गई कोई भी चीज़ दृश्य के बाल नोड्स के रूप में पहुंच योग्य है।

डब्ल्यूडब्ल्यूडीसी वार्ता की जांच करना एक अच्छा विचार है, लेकिन आप इसे कवर करने वाले व्यक्ति को याद करते हैं: स्प्राइटकिट संपादक के पीछे प्रेरणा के बारे में session 608: Best Practices for Building SpriteKit Games देखें, इसका उपयोग कैसे करें, और दृश्य सामग्री से लोड कैसे करें आपके दृश्य कोड में .sks फ़ाइल।

+0

उत्कृष्ट! उस वीडियो के पहले 20 मिनट बिल्कुल वही था जो मुझे चाहिए था! –

+0

मुझे .sks फ़ाइल थोड़ा सीमित लगता है।कभी-कभी मैं जो वस्तुएं जोड़ता हूं उसे खो देता है, और दूसरी बार यह मेरे द्वारा किए गए परिवर्तनों को बदल देता है (बनाम बनाम मोड संपादित करें)। एक परत दृश्य के बिना, मुझे नहीं पता कि यह कितना उपयोगी है .sks फ़ाइल तब तक है जब तक ऐप्पल अधिक सुविधाओं को जोड़ता है। एक जटिल पदानुक्रम के साथ काम करने के लिए आपको आगे और पीछे नोड्स को फेंकना होगा। –

संबंधित मुद्दे