2014-09-02 6 views
5

प्रयोग किया जाता है बदलने के लिए मैं बॉयलरप्लेट कोड (नया खेल आईओएस परियोजना) से मानक पूर्ण स्क्रीन SpriteKit दृश्य का उपयोग कर रहा हूँ, और जब मैंकैसे SKView letterbox रंग जब scaleMode .AspectFit

scene.scaleMode = .AspectFit 

का उपयोग करें कि सुनिश्चित करने के लिए दृश्य फिट बैठता है, शेष (लेटरबॉक्स) क्षेत्र काला रंग में रंगीन होता है।

मैं इन विकल्पों की कोशिश की है रंग बदलने के लिए:

let skView = self.view as SKView 

// was hoping this one would work 
skView.backgroundColor = UIColor.redColor() 

// didn't expect this would work, since scene is scaled anyways 
scene.backgroundColor = SKColor.redColor() 

इसके अलावा एक और रंग के लिए स्टोरीबोर्ड संपादक में SKView पृष्ठभूमि का रंग बदलने की कोशिश की, लेकिन कोई किस्मत।

लेटरबॉक्स वाले क्षेत्र के रंग को बदलने के लिए कहां से कोई सुझाव है?

+0

मुझे संदेह है कि यह संभव है क्योंकि पहलू मोटे तौर पर अंतिम उपाय समाधान है। डेवलपर के रूप में आपको सभी संकल्पों का सही ढंग से समर्थन करना होगा, यदि आवश्यकता हो तो आप संबंधित सीमा नोड्स/स्प्राइट्स जोड़कर "मैन्युअल रूप से" लेटरबॉक्स कर सकते हैं। – LearnCocos2D

उत्तर

2

मुझे लगता है कि लेटरहेड के कानों में रंग या स्थान sprites सेट करने का एक तरीका होना चाहिए ... लेकिन ऐसा लगता है कि ऐसा नहीं है। इसके अलावा, मैं LearnCocos2D से असहमत हूं। AspectFit के साथ कुछ भी गलत नहीं है। इसका उपयोग है।

मैंने जो किया है वह AspectFit का उपयोग करता है लेकिन स्क्रीन आकार के आधार पर दृश्य के आकार की भी गणना करता है। यह ओएसएक्स गेम के लिए सहायक नहीं है लेकिन यह आईओएस के लिए ठीक काम करेगा।

func createScene() -> GameScene { 
    let screenSize = UIScreen.mainScreen().bounds.size 
    var size:CGSize = CGSizeZero 

    size.height = Constants.sceneHeight 
    size.width = screenSize.width * (size.height/screenSize.height); 


    return GameScene(size: size) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let scene = self.createScene() 

    // Configure the view. 
    let skView = self.view as SKView 
    skView.showsFPS = false 
    skView.showsNodeCount = false 

    /* Sprite Kit applies additional optimizations to improve rendering performance */ 
    skView.ignoresSiblingOrder = true 

    /* Set the scale mode to scale to fit the window */ 
    scene.scaleMode = .AspectFit 

    skView.presentScene(scene) 
} 
+0

आह, मुझे आपके createScene() विधि में प्रत्येक बार "ऊंचाई" और "चौड़ाई" स्विच करके काम करने के लिए मिला, जो गेमसेन चौड़ाई को सीमित कारक में लॉक करता है, जो मेरे मामले में चौड़ाई है। (मेरे पास बाएं और दाएं की बजाय ऊपर और नीचे लेटरबॉक्स थे।) – avance

1

एक दृश्य प्रस्तुत करने के बाद, इसकी सामग्री को प्रस्तुतिकरण दृश्य में कॉपी किया गया है। यदि दृश्य और दृश्य एक ही आकार के हैं, तो सामग्री को सीधे दृश्य में कॉपी किया जा सकता है। यदि दोनों अलग-अलग हैं, तो दृश्य को दृश्य में फिट करने के लिए स्केल किया गया है। स्केलमोड प्रॉपर्टी निर्धारित करती है कि सामग्री को कैसे स्केल किया जाता है।

लेटरबॉक्सिंग दृश्य में बनाई गई है, इसलिए इसके आसपास कोई रास्ता नहीं है। ऐसा कहा जाता है कि यदि आप एक विशिष्ट दृश्य आकार और सार्वभौमिक समन्वय प्रणाली का उपयोग करना चाहते हैं तो अक्सर .aspectFit सेटिंग की आवश्यकता होती है। यदि यह आपका मामला है, तो निम्नलिखित मदद करनी चाहिए।

आपको यह पता लगाने की आवश्यकता है कि आपके वर्तमान डिवाइस से लेटर मुक्केबाजी को हटाने और अपने दृश्य में जोड़ने के लिए पैडिंग में मानक कितना मानक चाहिए। आप एक ऐसे दृश्य के साथ खत्म करते हैं जो आपके मूल आकार के बाद थोड़ा बड़ा या थोड़ा बड़ा होता है लेकिन दृश्य में कम से कम आपके मूल दृश्य आकार के समान आकार होता है। इसके बाद आप अपने गेम के लिए किस समन्वय प्रणाली का उपयोग करना चाहते हैं उसके आधार पर एंकरपॉइंट को मूल (0, 0) निर्देशांक या (0.5, 0.5) पर ले जा सकते हैं।

इसके लिए कोड समेकित है और समय में बदल सकता है। यदि आप त्वरित सुधार चाहते हैं, तो मैंने उस उद्देश्य के लिए बिल्कुल एक फ्रेमवर्क बनाया है। यह छोटी लेकिन पोर्टेबल है :)

https://github.com/Tokuriku/tokuriku-framework-stash

बस

:

  1. भंडार
  2. खोलें "SceneSizer" उप-फ़ोल्डर
  3. खींचें SceneSizer के लिए ज़िप फ़ाइल डाउनलोड करें।रूपरेखा "लेगो ब्लॉक" अपनी परियोजना में
  4. सुनिश्चित करें कि एंबेडेड और न सिर्फ अपने कोड import SceneSizer

में कहीं फ्रेमवर्क

  • आयात जुड़ा हुआ है और आपका काम हो गया में फ्रेमवर्क, अब आप कॉल कर सकते हैं बनाओ साइज़र क्लास के साथ: SceneSizer.calculateSceneSize(#initialSize: CGSize, desiredWidth: CGFloat, desiredHeight: CGFloat) -> CGSize

    दस्तावेज़ीकरण एक मानक दृश्य के साथ एक स्वच्छ और पूर्ण उपयोग के लिए फ़ोल्डर में है। उम्मीद है की यह मदद करेगा!

  • +0

    क्या मैं पूछ सकता हूं कि आपने इसे एक ढांचा क्यों बनाया? – avance

    +0

    निश्चित रूप से, ढांचे को बनाने और इसके संस्करण को बनाए रखने के लिए बस मेरे हाथ का अभ्यास करना। तो अगर मैं इसे संस्करणित करता हूं, तो लोगों के लिए कुछ फाइलों की तुलना में फ्रेमवर्क के रूप में नए संस्करण को प्लग करना आसान है .. – Tokuriku

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