फ्लैश पर एक iOS एप्लिकेशन विकसित करना

शायद, कई ने एडोब एयर प्रोजेक्ट के बारे में सुना है - फ्लैश एप्लिकेशन को संकलित करने और किसी भी प्लेटफॉर्म पर चलाने के लिए एडोब से बहुत मजबूत पहल - डेस्कटॉप, आईओएस, एंड्रॉइड, टीवी, ...

लंबे समय तक, हवा पर कुछ भी समझदार नहीं किया जा सकता था। लेकिन हाल ही में, प्रौद्योगिकी गति प्राप्त कर रही है, एडोब ने एयर कोड में कई अनुकूलन किए हैं, और अब इस पर एक बहुत ही फुर्तीला आवेदन लिखना संभव है। इस लेख में मैं iOS के लिए एक हवाई एप्लिकेशन विकसित करने में हमारे अनुभव के बारे में बात करूंगा।

हमें ऐसी जिंदगी कैसे मिली? ...


फिलहाल, हमारे छोटे स्टार्टअप का मुख्य प्रोजेक्ट (सामाजिक खेल), कई लोगों की कंपनी, निवेशकों की तलाश के दौरान अंतिम चरण में विकास के एक वर्ष के बाद जमी हुई है। इसलिए, खोज / बातचीत करते समय बेकार नहीं बैठने के लिए, यह हमारे लिए कुछ बहुत ही श्रमसाध्य नहीं है, और अगर यह कुछ कमा सकता है, तो यह बहुत ही ठाठ है।

क्योंकि हम दोनों में से कोई भी एकता से परिचित नहीं है, लेकिन बहुत कम है, लेकिन फ्लैश के साथ हम "आप" हैं - यह मेरे लिए एक अधिक या कम प्रस्तुत करने योग्य और गतिशील गेम बनाने के लिए प्रशंसित एयर तकनीक की कोशिश करने के लिए हुआ।

फिलहाल, iOS के लिए हवा के मामले मामलों का उपयोग करें - उंगलियों पर गिनें। हां, माशिनारियम बुरा नहीं है। लेकिन, फिर भी, यह एक संकेतक नहीं है। हम सोच रहे थे कि हवा एक गतिशील खिलौने से कैसे निपटेगी।

इसलिए फैसला किया गया। अनुमानित समय (1 महीना) - वितरित। और हम हमारे लिए एक नई तकनीक में तल्लीन हो गए ...

मुख्य मंच जिस पर हमने ध्यान केंद्रित किया था वह iPhone 4 था।

खेल का विचार है।


यहां हमने लंबे समय तक नहीं सोचा। कार्य कुछ ऐसा खोजना था जो निम्नलिखित मानदंडों को पूरा करे:

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

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



विकास की शुरुआत।


इसलिए, हमने शुरू किया ... यह ध्यान देने योग्य है कि हमें वायु प्रौद्योगिकी के बारे में बिल्कुल भी पता नहीं था।

लेकिन, जैसा कि यह निकला - सब डरावना नहीं है। यह एक ही फ्लैश है, केवल मोबाइल-विशिष्ट कार्यों के साथ काम करने के लिए अतिरिक्त कक्षाओं के एक जोड़े के साथ - मल्टीटच, आदि।

इसलिए हमने सामान्य फ्लैश विकास शुरू किया। मैं इस बारे में नहीं लिखूंगा - यह लेख का विषय नहीं है।

मैं केवल उन समस्याओं और कठिनाइयों के बारे में बात करूँगा जो हमने हार्डवेयर (iPhone, iPad) पर एप्लिकेशन लॉन्च करते समय सामना की थीं।

वैसे, जो लोग यह नहीं समझ पाए कि एयर क्या है - मैं संक्षेप में कहूंगा। आप एक फ़्लैश खेल विकसित कर रहे हैं। फिर इसे एयर आईओएस के तहत और निकास पर (आदर्श रूप से) संकलित करें - आपको ऐप स्टोर पर भेजने के लिए एक तैयार .ipa फ़ाइल मिलती है।

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

प्रदर्शन।


हमारे विकास में प्रदर्शन का विषय सबसे महत्वपूर्ण है। स्वाभाविक रूप से, हम एक ऐसा उत्पाद प्राप्त करना चाहते थे जो अन्य आईओएस गेम से चिकनाई में भिन्न न हो। खैर, या जितना संभव हो उतना उनके करीब। बहतरीन घटनाओं, मैं कहूँगा कि यह हर जगह संभव नहीं था।

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

फ्लैश इंजन, बिटमैप फ्रेम।

बेशक, किसी भी वेक्टर की कोई बात नहीं हो सकती है। इसलिए, हमने जो पहली कोशिश की वह हमारे वेक्टर को बिटमैप्स में निर्यात करना और उन्हें फ्लैश फ्रेम में वापस डालना था।



यह बुरा नहीं निकला, लेकिन मैं इसे तेजी से / चिकनी चाहता था।

बिटमैप ब्लिटिंग।

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

अगला - परिणामी कैनवास को एक बिटमैप ऑब्जेक्ट के रूप में आउटपुट करता है।

यह तकनीक डेस्कटॉप पर काफी अच्छा प्रदर्शन करती है, लेकिन iOS पर यह विफल रही। इंजन 10 गुना धीमा चला।

संशोधित फ्लैश इंजन।

यहाँ यह है - सुनहरा मतलब।

कुछ googling के बाद, यह स्पष्ट हो गया कि यह आपको शेड्यूल को गति देने की अनुमति देता है। लब्बोलुआब यह है कि जब हमने 1 मामले में, एनीमेशन के प्रत्येक फ्रेम को एक नए फ्रेम में बनाया था, फ्लैश को पुराने फ्रेम से प्रत्येक फ्रेम को मारना था और एक नया बनाना था। जो बहुत संसाधन गहन है।

मैं कहीं ऐसी तकनीक के बारे में पढ़ता हूं जो आपको अपने मोबाइल वातावरण का अधिकतम लाभ उठाने की अनुमति देती है।

इसका सार यह है कि आप 1 फ्रेम के साथ एक मूवीक्लिप बनाएँ और एनीमेशन के सभी फ़्रेमों को तुरंत इस फ्रेम में छोड़ दें।

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

प्रौद्योगिकी के संशोधन के रूप में - एक विकल्प है (जिसका उपयोग किया गया था) जब सभी फ्रेम अलग-अलग बिटमैपडैटा में संग्रहीत किए जाते हैं। और बिटमैप्स के ढेर से दिखाई देने वाले खींचने के बजाय, आपके पास एक है, इसके लिए मुख्य बिटमैप और पुनर्व्यवस्थित बिटमैपडेटा। यानी main_bmp.bitmapData = bd_frame [i] जैसा कुछ;

इस पर और रुक गया। एनीमेशन की गति पहले मामले की तुलना में 1.5 गुना अधिक थी और हमें iPhone4 पर 40 एफपीएस पर 20-30 स्प्राइट्स प्रदर्शित करने की अनुमति दी, जो हमारे लिए काफी उपयुक्त था।

प्रदर्शन के अनुकूलन के लिए टिप्स।


विकास के दौरान, हमें एक युक्ति का सामना करना पड़ा जिसे हम सुझावों के रूप में संक्षेप में प्रस्तुत करना चाहेंगे:
  1. संभव के रूप में कुछ गतिशील वस्तुओं बनाएँ।
  2. स्क्रीन पर कम ऑब्जेक्ट "माउस" (उंगली) की घटनाओं को पकड़ लेंगे - बेहतर। हर किसी को माउस-सक्षम, माउस-चाइल्ड्रेन को गलत पर सेट करें।
  3. बेहतर है कि बड़ी वस्तुओं को स्थानांतरित करने की कोशिश न करें, बहुत कम उनके अल्फा को बदलते हैं।
  4. कुछ भी जो एनिमेटेड नहीं है, उसके लिए cacheAsBitmap सेट करें।
  5. यदि आपको कुछ अल्फा को घुमाने या बदलने की आवश्यकता है - cacheAsBitmapMatrix का उपयोग करें - यह इस प्रक्रिया को गति देगा।
  6. ENTER_FRAME पर लाइसेंसधारियों का एक गुच्छा लटकाएँ नहीं। बेहतर वह करें जो आपकी जरूरत की हर चीज का कारण बने।
  7. फ़्रेम से संलग्न न हों, बल्कि टाइमर से संलग्न हो जाएं। यानी ENTER_FRAME पर अपने लाइसेंसधारी में, अंतिम कॉल से समय काउंटर दर्ज करें और पहले से ही आगे बढ़ रहे हैं - सभी गणना करें।

इसलिए ... हम समय सीमा को पूरा नहीं करते थे और 1 महीने के बजाय, यह सब 2 हो गया था। लेकिन मैं वास्तव में नहीं करना चाहता था।

प्लेटफॉर्म की बारीकियां।


रेटिना बनाम लो-रेस।

एक अलग स्क्रीन के साथ iPhones पर चलने वाला एक वायु अनुप्रयोग कैसे व्यवहार करता है? वास्तव में, सब कुछ सरल है। सेटिंग्स में, आप यह निर्धारित करते हैं कि आप रेटिना एप्लीकेशन चाहते हैं या नहीं। और इसके आधार पर, आपका आवेदन पैमाना होगा।

हमारे मामले में, हमने रेटिना एप्लिकेशन और एक दृश्य आकार 960x640 बनाया। IPhone 4 / 4S पर, यह बिना स्केलिंग के चला जाता है। 3 सीरीज़ पर, इसे 50% तक बढ़ाया जाता है।

बेशक, अगर आप वास्तव में चाहते हैं - आप भ्रमित हो सकते हैं और प्रारंभ के दौरान स्केल प्राप्त कर सकते हैं और यह निर्भर करता है कि यह 1.0 या 0.5 है - विभिन्न ग्राफिक्स प्रदर्शित करें ... लेकिन यह हमारे लिए बहुत मुश्किल लग रहा था (और यह हमें फ़्लैश में ही दृश्यों को इकट्ठा करने की अनुमति नहीं देगा, सब कुछ होगा) मुझे कोड लिखना था), इसलिए हमने स्पैट किया।

iPhone बनाम iPad।

यहाँ रेटिना के साथ भी ऐसा ही है। यदि आप "आईपैड" चेकबॉक्स की जांच करते हैं, तो आईपैड पर आवेदन पूर्ण स्क्रीन में चलेगा, इसे फिट करने के लिए बढ़ाया जाएगा (जो 960x640 के मामले में कई स्केलिंग और कलाकृतियों में परिणाम देगा)। यदि आप इस बॉक्स की जांच नहीं करते हैं, तो यह एक iPad पर चलने वाले नियमित iPhone एप्लिकेशन की तरह व्यवहार करेगा - अर्थात "x2" बटन के साथ एक छोटी विंडो में चलाएं।



हमने बस यही किया।

भविष्य में, शायद, हम विशेष रूप से iPad के लिए HD संस्करण - पूर्ण स्क्रीन और पूर्ण ग्राफिक्स के साथ एकत्र करेंगे।


CPU बनाम GPU।

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

लेकिन यह किसी तरह बहुत ही रत्न था और यह तय किया गया था कि खेल मोमबत्ती के लायक नहीं है।

लेकिन, मुझे लगता है, प्रत्येक परियोजना के लिए इस मुद्दे पर व्यक्तिगत रूप से विचार किया जाना चाहिए।

समस्याओं और समाधान।


जाहिर है, सभी iOS फीचर्स एयर से नहीं मिलेंगे। उदाहरण के लिए, गेम सेंटर की क्षमताओं के लिए। क्या करें? मृत अंत?

बिलकुल नहीं। इस सब के लिए, एक देशी एक्सटेंशन तकनीक है। इन एक्सटेंशनों का उपयोग करके, आप किसी भी विशिष्ट लोहे तक "पहुंच" सकते हैं। उनका उपयोग कैसे करें यह एक व्यापक विषय है।

इसके अलावा, देशी एक्सटेंशन का उपयोग एक दूसरी (और यहां तक ​​कि तीसरी) समस्या को दर्ज करता है - फ्लैश से आईपीए संकलित करने में असमर्थता (आपको कमांड लाइन का उपयोग करना होगा) और हार्डवेयर पर इस काम को करने के लिए एक टैम्बोरिन के साथ नृत्य करना।

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

इसके अलावा, पूरी प्रक्रिया अभी भी पीसी पर पूरी नहीं हो सकती है। इस तथ्य के बावजूद कि विंडोज़ के तहत भी प्रमाण पत्र बनाए जा सकते हैं (फिर से - अगर किसी को दिलचस्पी है - मैं एक अलग लेख में एक टैम्बोरिन के साथ सभी नृत्यों का वर्णन कर सकता हूं), लेकिन विंडोज के तहत जो नहीं किया जा सकता है वह ऐप में एप्लिकेशन भरना है। हाल ही में, यह एकमात्र संभव तरीके से किया गया है - एक विशेष कार्यक्रम का उपयोग करके जिसे न्यूनतम न्यूनतम 10 मैक ओएस की आवश्यकता होती है। और कोई उपाय नहीं। टैम्बोरिन के साथ एक लंबे और लगातार नृत्य ने मुझे अभी भी एएमडी के लिए वर्चुअल मशीन पर makoshi के इस संस्करण को रखने की अनुमति दी (यदि आप रुचि रखते हैं, तो संक्षेप में: केवल छवि 10.6.4 (विरासत) ने काम किया, मैंने 10.6.8 (अपने हाथों से) के लिए एक कॉम्बो अपडेट डाउनलोड किया! , रिबूट नहीं किया गया, किक्स को बदल दिया ताकि पीसीआई कॉन्फ़िगरेशन पर लटका न शुरू हो, कैश को अनदेखा करने के साथ लोड किया गया)। एक तंबू के साथ कुछ और नृत्य - और आवेदन भर गया है!

निष्कर्ष।


क्या अनुभव सफल रहा? नई तकनीक का अनुभव कैसा है - मुझे ऐसा लगता है।



लेकिन गतिशील खेल लिखने के लिए एक मंच के रूप में - मैं अभी भी फ्लैश की सिफारिश नहीं करूंगा। क्योंकि अभी भी ब्रेक हैं। उदाहरण के लिए, मेनू में वस्तुओं के आंदोलन के एनीमेशन को 4 जी iPhone पर सुचारू नहीं किया जा सका। 4S और iPad 2 पर - सब कुछ उड़ जाता है। लेकिन, दूसरी ओर, ये विशेषताएं विशेष रूप से महत्वपूर्ण नहीं हैं और गेमप्ले के साथ हस्तक्षेप नहीं करती हैं।

संक्षेप - आप ऐसा कह सकते हैं - आप लिख सकते हैं। और यह अच्छा भी लग सकता है। लेकिन कुछ बिंदुओं पर, यह अभी भी मूल अनुप्रयोगों तक नहीं पहुंचता है।

हालाँकि, Adobe भी स्थिर नहीं है। कल, उन्होंने एयर 3.2 को रिलीज करने की घोषणा की, जहां GPU (3 डी सहित) का पूरा उपयोग है। आइए देखें ...

परिणाम।


यहाँ चित्र, प्रोमो कोड और उत्पाद लिंक थे, लेकिन क्योंकि मैं "मैं पीआर हूं" में प्रकाशित नहीं करना चाहता हूं, फिर मैंने उन्हें हटा दिया।

परिणामों के बारे में बात करना जल्दबाजी होगी - ऐप में खिलौना केवल कुछ दिनों का है। हाल ही में iphones.ru पर प्रकाशित हुआ। तो अभी के लिए, सब कुछ आगे है। यदि यह दिलचस्प है - तो मैं वाणिज्यिक परिणामों के बारे में लिख सकता हूं। सच है, वे पहले से ही "नायक" से 1-बिंदु की समीक्षा को पकड़ चुके हैं, उपलब्धियों की कमी के बारे में शिकायत (और वे मुख्य मेनू में सही हैं) और भौतिकी । हां, यह भौतिकी है जो हमारे पास खेल में कमी है।

एक बोनस के रूप में - रेखाचित्र के एक जोड़े:

Source: https://habr.com/ru/post/In139146/


All Articles