दिलचस्प पोस्ट
उपयोगकर्ता डेटा को jqgrid में कैसे पढ़ा जाए? IE9 JSON डेटा "क्या आप इस फ़ाइल को खोलना या सहेजना चाहते हैं" वेब ब्राउजर में बैक बटन कैसे काम करता है? क्या सामग्री सारांश प्राप्त करने के लिए सिर्फ एक साफ विकिपीडिया एपीआई है? मैं कैसे जांचूं कि उपयोगकर्ता कुंजी दबा रहा है? क्लिक करने योग्य लेबल के साथ एक HTML चेकबॉक्स कैसे बनाएं preg_match (); – अज्ञात संशोधक '+' किसी बॉर्डर के बिना किसी फ़ॉर्म को कैसे ले जाना और उसका आकार बदलना है? PrimeFaces के साथ jQuery और jQuery प्लगिन का उपयोग कैसे करें सीएसएस रूपांतरण इनलाइन तत्वों पर काम नहीं करता है पद्धति को किसी स्टोर की अभिव्यक्ति में अनुवाद नहीं किया जा सकता XMLHttpRequest jQuery के साथ एक यूआरएल लोड नहीं कर सकता Linq क्वेरी ग्रुप द्वारा और पहले आइटम का चयन क्या यूआरएल पैरामीटर में जेसन को परिवर्तित करने के लिए कोई देशी फ़ंक्शन है? एक क्रोन लिखने के लिए जो आधी रात को एक स्क्रिप्ट चलाएगा?

स्प्राइटकिट में विभिन्न आईओएस डिवाइस के प्रस्तावों के साथ काम करना

मैं एक्सट्रोड 6, आईओएस 8 बीटा 5 में स्प्राइटकिट के साथ खेल रहा हूं। सब कुछ सब कुछ ठीक है और आईफोन 4 एस सिम्युलेटर पर पूरी तरह से काम कर रहा है, हालांकि 5 एस पर स्विच करते समय, स्क्रीन के निचले हिस्से में काट दिया जाता है।

यह मेरी समझ के लिए था कि आईफोन स्क्रीन के निचले बाएं कोने को सीजीपीईंट (0, 0) होना चाहिए, लेकिन कंसोल को निर्देशांक प्रिंट करके स्थान की जांच करने के बाद, बाएं कोने के सबसे निम्न बिंदु जो मैं क्लिक कर सकता था (5, 44)। क्या मेरे दृश्य सेटअप में यह कुछ गड़बड़ है जिससे यह कारण हो सकता है?

GameViewController फ़ाइल में कोई परिवर्तन नहीं किया गया है और मैं GameScene फ़ाइल को तब भी तब्दील कर देता हूं जब समस्या बनी रहती है

क्या किसी ने कम से कम मुझे सही दिशा में इस के साथ बात कर सकते हैं?

Solutions Collecting From Web of "स्प्राइटकिट में विभिन्न आईओएस डिवाइस के प्रस्तावों के साथ काम करना"

निम्नलिखित कोड जोड़ना आपकी समस्या को ठीक करेगा (कोड स्विफ्ट में है):

scene.scaleMode = SKSceneScaleMode.ResizeFill 

अब अगर आप यह जानना चाहते हैं कि यह आपकी समस्या को ठीक क्यों करता है, तो आपकी समस्या वास्तव में क्या है, और कई प्रस्तावों को कैसे नियंत्रित किया जाए – मेरा सुझाव है कि आप पढ़ना जारी रखें

तीन चीजें हैं जो आपके दृश्य में नोड्स की स्थिति को प्रभावित कर सकती हैं।

1) एंकर पॉइंट
सुनिश्चित करें कि आपके दृश्य का एंकर पॉइंट (0,0) नीचे बायां है डिफ़ॉल्ट रूप से दृश्य का लंगर बिंदु (0,0) से शुरू होता है इसलिए मैं मानता हूं कि इस मुद्दे को नहीं बना रहा है

2) आकार
अपने दृश्य के आकार की जांच करें मैं आम तौर पर अपने दृश्य आकार से डिवाइस के आकार (यानी आईपैड, आईफोन 4 इंच, आईफोन 3.5 इंच) से मेल खाता हूं, फिर मैं अपने नोड्स को संचय करने के लिए इस दृश्य में एक और परत रखता हूं। यह मुझे छोटे प्रस्तावों वाले उपकरणों के लिए स्क्रॉलिंग प्रभाव करने में सक्षम बनाता है, लेकिन यह आपके गेम ऑफ़-कोर्स पर निर्भर करता है। मेरा अनुमान है कि आपका दृश्य आकार 320, 480 पर सेट किया जा सकता है जो आपके iPhone 5s पर स्थिति समस्याओं को पैदा कर सकता है।

3) स्केल मोड
स्केल मोड का आपके दृश्य में नोड्स की स्थिति पर बहुत प्रभाव पड़ा है। सुनिश्चित करें कि आप कुछ ऐसे पैमाने पर सेट करें जो आपके गेम के लिए समझ में आता है। जब आपके दृश्य का आकार दृश्य के आकार से मेल नहीं खाता है, तो स्केल मोड किक करता है। तो स्प्रैट किट को इस परिस्थिति से निपटने का तरीका पता करने के लिए स्केल मोड का उद्देश्य है। मेरा अनुमान है कि आपके पास दृश्य आकार 320,480 पर सेट है और आईफोन 5 के दृश्य से मिलान करने के लिए इस दृश्य को बढ़ाया जा रहा है जिससे आप जो वर्णन कर सकते हैं उसके समान स्थिति समस्याएं पैदा हो सकती हैं। नीचे आप अपने दृश्य के लिए सेट कर सकते हैं विभिन्न पैमाने पर मोड हैं।

 SKSceneScaleMode.AspectFill 

प्रत्येक आयाम का स्केलिंग कारक की गणना की जाती है और दो में से बड़ा चुना जाता है। दृश्य के प्रत्येक अक्ष को एक ही स्केलिंग कारक से बढ़ाया जाता है यह गारंटी देता है कि पूरे क्षेत्र में दृश्य भरा हुआ है, लेकिन इस दृश्य के कुछ हिस्सों का कारण बन सकता है।

 SKSceneScaleMode.AspectFit 

प्रत्येक आयाम का स्केलिंग कारक की गणना की जाती है और दो के छोटे चुने जाते हैं। दृश्य के प्रत्येक अक्ष को एक ही स्केलिंग कारक से बढ़ाया जाता है यह गारंटी देता है कि पूरे दृश्य दृश्यमान है, लेकिन दृश्य में लेटरबॉक्सिंग की आवश्यकता हो सकती है।

 SKSceneScaleMode.Fill 

दृश्य के प्रत्येक अक्ष को स्वतंत्र रूप से बढ़ाया जाता है ताकि दृश्य में प्रत्येक अक्ष दृश्य में उस अक्ष की लंबाई के लिए नक्शे को देख सकें।

 SKSceneScaleMode.ResizeFill 

इस दृश्य को देखने के लिए स्केल नहीं किया गया है इसके बजाय, दृश्य को स्वचालित रूप से पुन : आकार दिया जाता है ताकि उसके आयाम हमेशा दृश्य के साथ मेल खाए।

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


लेकिन क्या होगा अगर मैं अपने दृश्य को स्केल करना चाहता हूं?
अगर आपको अपने दृश्य को स्केल करना है, लेकिन फिर भी आप स्थिति को देखने के रिश्तेदार चाहते हैं (यानी आप चाहते हैं कि (0,0) स्क्रीन के निचले बाएं भाग बने, तब भी जब दृश्य कटऑफ़ हो) तो मेरा उत्तर देखें


अतिरिक्त जानकारी
नमूना कोड के लिए यहां जवाब देखें, जिसमें दिखाया गया है कि मैं लेआउट नोड को गतिशील रूप से कैसे दिखाता हूं।

एकाधिक डिवाइसों को समर्थन करने के लिए स्केलिंग के बारे में अधिक विवरण के लिए यहां उत्तर देखें।

यदि आप अपने दृश्य के आकार को संरक्षित करना चाहते हैं (आमतौर पर वांछित जब आप किसी निश्चित आकार और समन्वय प्रणाली के साथ काम करते हैं), तो आप अपने दृश्य के दोनों तरफ पैडिंग जोड़ना चाह सकते हैं। यह पत्र मुक्केबाजी को हटा देगा और किसी भी मंच पर आपके ऐप के सभी भौतिकी और गतिशीलता को संरक्षित करेगा।

इसके साथ मदद करने के लिए मैंने एक छोटा फ्रेमवर्क बनाया:

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

बस:

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

और आप कर चुके हैं, अब आप के साथ SceneSizer.calculateSceneSize(#initialSize: CGSize, desiredWidth: CGFloat, desiredHeight: CGFloat) -> CGSize क्लास को कॉल कर सकते हैं: SceneSizer.calculateSceneSize(#initialSize: CGSize, desiredWidth: CGFloat, desiredHeight: CGFloat) -> CGSize

सिर्फ मामले में, सीएमडी + 1 करने का प्रयास करें, मेरे लिए काम किया। कुछ तत्वों को काट दिया गया था क्योंकि वे सिम्युलेटर में प्रदर्शित नहीं किए गए थे – मैं इस पर जोर देता हूं, यह सिर्फ एक सिम्युलेटर की सुविधा है (और यदि आप मुझसे पूछते हैं, तो इसका समाधान करने के लिए समय बिताना)। सीएमडी + 2, सीएमडी + 3 दृश्य कभी-कभी दृश्य के कुछ हिस्सों को छिपा सकते हैं।