2012-01-09 36 views
18

मैं एंड्रॉइड के लिए एक गेम लिखना चाहता हूं, मुझे ड्राइंग के लिए कैनवास या ओपनगल के बीच चयन करना है। मैंने पढ़ा है कि कैनवास के पास एक अच्छा फ्रेमरेट नहीं है, लेकिन क्या अच्छा है? कल्पना कीजिए कि आप एक नाराज पक्षियों के खेल लिखने जा रहे थे, क्या कैनवास फ़्रेमेट पर्याप्त होगा?एंड्रॉइड गेम, कैनवास या ओपनजीएल?

+2

क्या आपने डेवलपर साइट पर ग्राफिक्स दस्तावेज़ों के माध्यम से पढ़ा है? http://developer.android.com/guide/topics/graphics/index.html मैं ओपनजीएल के साथ जाऊंगा लेकिन एंड्रॉइड 3.0 और ऊपर कैनवास में हार्डवेयर त्वरित हो सकता है जो प्रदर्शन को बेहतर करेगा – RyanSullivan

+5

यदि आप स्प्राइट विधि परीक्षण ऐप डाउनलोड करते हैं यहां http://code.google.com/p/apps-for-android/ बिल्ड और इंस्टॉल करें, यह विभिन्न प्रतिपादन विधियों का उपयोग करके बेंचमार्किंग करता है। इसमें एक्सटेंशन का भार है जो आप चालू और बंद कर सकते हैं और प्रभाव – RyanSullivan

उत्तर

1

आप इतनी बड़ी खेल आप निश्चित रूप से AndEngine उपयोग करने पर विचार करना चाहिए करने के लिए जा रहे हैं: http://www.andengine.org/

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

एंडइंजिन ओपनजीएल का उपयोग करता है - इसलिए आपको कैनवास पर ड्राइंग करते समय संभावित रूप से कम फ़्रेमेट्स के साथ गड़बड़ नहीं करना पड़ता है। https://market.android.com/details?id=org.anddev.andengine.examples

+0

देखें। मुझे एक नज़र डालेंगे – seipey

3

यह सब खेल क्रियान्वित करना चाहिए के प्रकार पर निर्भर:

बाहर उदाहरण अनुप्रयोग चेक।

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

यदि स्प्राइट्स बहुत अधिक नहीं हैं और संख्या बहुत कम है, तो सच यह है कि संभावित रूप से आप एक बड़ा अंतर देखना चाहते हैं (मान लें कि मूल 2 डी ग्राफिक्स उपयोग कैनवास के साथ कई सारे गेम)।

यदि प्रदर्शन महत्वपूर्ण है या आपके पास बहुत अधिक संख्या में sprites हैं तो ओपनजीएल आधारित प्रणाली को लागू करना उचित है।

विचार करें कि ओपनजीएल का उपयोग करके आप जीपीयू समर्पित हार्डवेयर का लाभ उठाएंगे ताकि आपके सीपीयू को ग्राफिक्स प्रतिपादन के बोझ का ऑफलोड किया जा सके।

इसके अलावा, आप मिश्रण, प्रकाश व्यवस्था, पोस्ट प्रोसेसिंग प्रभावों का उपयोग कर कैनवास कार्यान्वयन की तुलना में अधिक लचीलापन का लाभ उठाएंगे। आप क्या कर सकते हैं वास्तव में कोई सीमा नहीं है।

एक साधारण उदाहरण रोटेशन और स्केलिंग है कि ओपनजीएल जैसे 3 डी इंजन का उपयोग करना बहुत सस्ता है और उत्कृष्ट परिणाम प्रदान करता है।

कैनवास को वास्तव में सरल कार्यान्वयन के लिए अपनाया जाना चाहिए।

पीएस यदि आप ओपनजीएल ईएस 2.0 और प्रोग्राम करने योग्य पाइपलाइन के लिए जाते हैं, तो आपके पास जो कुछ भी आप प्राप्त करते हैं (चमकते, धुंधला और हजारों अलग-अलग विकल्प) में वास्तव में कोई सीमा नहीं है। उस मामले में सीमा वास्तव में हमारी कल्पना है।

:)

+0

मैंने पहले ओपनएल के साथ काम किया है और आप सही हैं, इसकी कोई सीमा नहीं है। आपके उत्तर के लिए धन्यवाद। – seipey

45

मैं शुरू में कैनवास लेकिन फिर जरूरत का उपयोग कर निम्नलिखित कारणों के लिए ओपन करने के लिए स्विच करने के लिए अपने खेल लिखा है:

  • कैनवास का उपयोग करना, अपने स्प्राइट ढेर पर जमा हो जाती है (जब तक आप विशेष रूप से उन्हें डिस्क पर कैश करें) यह फोन के आधार पर आपकी स्प्राइट परिसंपत्तियों के कुल आकार पर एक सीमा रखता है - अच्छा नहीं! मैंने पाया कि यह मेरे फोन पर लगभग 42 एमबी था - ध्यान दें कि यह बिटमैप्स का असम्पीडित आकार है। यदि आपके पास कई प्रकार की इकाई है, प्रत्येक अलग-अलग एनिमेशन के साथ आप इस आकार तक बहुत जल्दी पहुंच सकते हैं।

  • ओपनजीएल आपकी स्प्राइट परिसंपत्तियों को ढेर में अलग से स्टोर करता है जो स्मृति को नाटकीय रूप से उपलब्ध कराता है।

  • कैनवास बहुत अच्छी तरह से स्केल नहीं करता है। जितना अधिक। ड्रा (...) आपको कॉल करता है, धीमा यह दौड़ जाएगा। रिश्ता काफी रैखिक है।

  • ओपनजीएल का उपयोग करके आप प्रदर्शन को बेहतर बनाने के लिए अपने ड्रॉ कॉल को एक साथ बैच कर सकते हैं।

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

चीजों को शुरू करने के लिए थोड़ा आसान बनाने के लिए, मैंने कुछ उपयोगी उपयोगिता कक्षाएं लिखी हैं जो आपके लिए सभी छोटी किरदार ओपनजीएल करते हैं। वे आपको सरल बनाने की अनुमति देते हैं। ड्रॉ (..) कैनवास का उपयोग करते समय समान कॉल करते हैं। निम्नलिखित वीडियो ट्यूटोरियल मिलना चाहिए आप आरंभ:

http://www.youtube.com/watch?v=xc93rN2CGNw

संपादित करें: 03/04/13

ऐसा लगता है कि के रूप में नए Android उपकरणों और ऑपरेटिंग सिस्टम बाहर आ गूगल कैनवास के प्रदर्शन में वृद्धि हुई है । यूटिलिटी क्लास का एक उपयोगकर्ता ऊपर बताता है कि कुछ बेंचमार्किंग करने के बाद निम्नलिखित ईमेल के साथ मुझे वापस मिला:

प्रत्येक फ्रेम में कैनवास में यादृच्छिक स्थितियों पर 500 sprites ड्राइंग। Huawei साहब (जिंजरब्रेड, सिंगल कोर 1.4 Ghz): SpriteBatcher: 19-20 एफपीएस, कैनवस: 23-24 एफपीएस

नेक्सस 7 (JellyBean, 4 कोर 1.3 Ghz): SpriteBatcher

यहाँ के परिणाम हैं : 29-30 एफपीएस, कैनवस: 57-58 एफपीएस

अब, यह उपयोगकर्ता के लिए मेरा जवाब में मैं विस्तार से बताया इस तरह से मैं उपयोगिता वर्ग SpriteBatcher लिखा है में अक्षमताओं से कोई लेना देना हो सकता है। हालांकि कैनवास के साथ अपने स्वयं के अनुभव से एक एचटीसी डिजायर पर वापस फ्रायियो 2.2 चल रहा है, मैं कह सकता हूं कि यह निश्चित रूप से स्प्राइट के लिए धीमा स्प्राइट था!

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

यदि मैं और जानूं, तो मैं इस उत्तर को अपडेट करना जारी रखूंगा।

+0

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