2014-06-08 11 views
14

ऑब्जेक्टिव-सी में, में पर्दे के संक्रमण के लिए कैसे स्प्राइट-किट का उपयोग कर, मैं सफलतापूर्वक कुछ ऑब्जेक्टिव-सी में निम्न कोड की तरह उपयोग ऊपर एक नया दृश्यस्विफ्ट

if ([touchedNode.name isEqual: @"Game Button"]) { 
     SKTransition *reveal = [SKTransition revealWithDirection:SKTransitionDirectionDown duration:1.0]; 
     GameScene *newGameScene = [[GameScene alloc] initWithSize: self.size]; 
     // Optionally, insert code to configure the new scene. 
     newGameScene.scaleMode = SKSceneScaleModeAspectFill; 
     [self.scene.view presentScene: newGameScene transition: reveal]; 
    } 

लाने के लिए होगा करने की कोशिश में पोर्ट स्विफ्ट के लिए मेरे सरल खेल है, अब तक मैं इस काम के ...

for touch: AnyObject in touches { 
     let touchedNode = nodeAtPoint(touch.locationInNode(self)) 
     println("Node touched: " + touchedNode.name); 
     let touchedNodeName:String = touchedNode.name 

     switch touchedNodeName { 
     case "Game Button": 
      println("Put code here to launch the game scene") 

     default: 
      println("No routine established for this") 
     } 

है लेकिन मैं क्या कोड वास्तव में एक और दृश्य में संक्रमण के लिए लिखने के लिए पता नहीं है। प्रश्न (ओं):

  1. क्या कोई स्विफ्ट के साथ एसकेट्रांसशन का उपयोग करने का उदाहरण प्रदान कर सकता है?
  2. क्या आप आमतौर पर अन्य दृश्य कोड को अन्य दृश्य के लिए रखने के लिए एक और "फ़ाइल" बनाते हैं, मानते हैं कि आपके पास उद्देश्य-सी के तहत होगा, या स्विफ्ट का उपयोग करने के बारे में कुछ है जिसका अर्थ है कि मुझे इसे अलग-अलग संपर्क करना चाहिए?

आप

+1

2. स्विफ्ट वास्तव में, क्योंकि यह पूर्ण रूप से अपने मॉड्यूल में सभी फाइलों का आयात करता है यह आसान एक से अधिक फ़ाइलों का उपयोग करने के लिए बनाता है । उद्देश्य-सी –

उत्तर

38

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

फिर अपने पहले प्रश्नों के लिए ... हाँ, आपके पास पहले से ही इसका अच्छा सौदा था। असल में, जहां से आप पहुंचे, आपको गेमसेन का आकार इसके आकार के माध्यम से बनाना होगा: प्रारंभकर्ता। वहां से, आप केवल गुण सेट करते हैं और वर्तमान कॉल करते हैं।

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    super.touchesBegan(touches, withEvent: event) 

    guard let location = touches.first?.locationInNode(self), 
     let scene = scene, 
     nodeAtPoint(location) == "Game Button" else { 
     return 
    } 

    let transition = SKTransition.reveal(
     with: .down, 
     duration: 1.0 
    ) 

    let nextScene = GameScene(size: scene.size) 
    nextScene.scaleMode = .aspectFill 

    scene.view?.presentScene(nextScene, transition: transition) 
} 
+2

के साथ समान पैटर्न का पालन न करने का कोई कारण नहीं है। धन्यवाद। बस उन लोगों के लिए एक नोट जो लगभग मेरे रूप में चुनौतीपूर्ण हैं ... "गेमसेन" में "गेमसेन" (आकार: self.scene.size) "सिर्फ आपके द्वारा बनाए गए स्प्राइटकिट फ़ाइल नाम को संदर्भित करता है (यह एक विशेष आरक्षित वाक्यांश नहीं है) । – Narwhal

+1

उस दृश्य के साथ क्या होता है जिसे आप दूर कर रहे हैं? क्या यह चल रहा है या आपको जानबूझकर इसे रोकना होगा? अगर उस दृश्य पर कुछ कार्रवाई हो रही है जिसे आप इससे दूर कर रहे हैं तो ऐसा लगता है कि आपके गेम को प्रभावित कर सकता है। – zeeple

+2

@ user1639164 डिफ़ॉल्ट रूप से आउटगोइंग और आने वाले दृश्यों को संक्रमण के दौरान रोका जाता है। यदि आप इस व्यवहार को बदलना चाहते हैं, तो यह SKTransition के 'PausesIncomingScene' और' pausesOutgoingScene' गुणों के मानों को बदलकर किया जा सकता है। –

3

अगर आप स्पर्श begain या नोड कार्रवाई पर काम करना होगा, तो फिर इसका इस्तेमाल:

override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) { 
     let touch = touches.anyObject() as UITouch 
     if CGRectContainsPoint(btncloseJump.frame, touch.locationInNode(self)) { 
      self.scene.removeFromParent() 
      btncloseJump.removeFromParent() 
      let skView = self.view as SKView 
      skView.ignoresSiblingOrder = true 
      var scene: HomeScene! 
      scene = HomeScene(size: skView.bounds.size) 
      scene.scaleMode = .AspectFill 
      skView.presentScene(scene, transition: SKTransition.fadeWithColor(SKColor(red: 25.0/255.0, green: 55.0/255.0, blue: 12.0/255.0, alpha: 1), duration: 1.0)) 
     } 
    } 
+0

किया गया है, इस उत्तर ने मुझे भी मदद की। – Nate4436271