एंड्रॉइड गेम को कितने थ्रेड का उपयोग करना चाहिए?


28

कम से कम, एक OpenGL Android गेम में UI थ्रेड और एक रेंडरर थ्रेड होता है GLSurfaceViewRenderer.onDrawFrame()Higest FPS प्राप्त करने के लिए न्यूनतम कार्य करना चाहिए। भौतिक विज्ञान, एआई आदि को हर फ्रेम को चलाने की आवश्यकता नहीं है, इसलिए हम उन्हें दूसरे धागे में रख सकते हैं। अब हमारे पास है:

  1. रेंडरर थ्रेड - एनिमेशन को अपडेट करें और पोल ड्रा करें
  2. गेम थ्रेड - तर्क और आवधिक भौतिकी, एआई, आदि अपडेट
  3. UI थ्रेड - केवल Android UI इंटरैक्शन

चूंकि आप कभी यूआई थ्रेड को ब्लॉक नहीं करना चाहते हैं, इसलिए मैं गेम लॉजिक के लिए एक और थ्रेड चलाता हूं। शायद यह आवश्यक नहीं है, हालांकि? क्या रेंडरर थ्रेड में गेम लॉजिक चलाने का कोई कारण है?

जवाबों:


18

Google के क्रिस प्रुइट ने अपने रेप्लिका द्वीप ब्लॉग में इस मुद्दे के बारे में बात की है । क्योंकि eglSwapBuffers () GLSurfaceView थ्रेड में एक ब्लॉकिंग कॉल है, दूसरे लॉजिक में गेम लॉजिक कोड इसे चलाने की अनुमति देता है जबकि स्वैप बफ़र्स कॉल ब्लॉक कर रहा है। यह महत्वपूर्ण है अगर आपका खेल जटिल है और आप प्रति सेकंड 60 फ्रेम हासिल करना चाहते हैं।

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


2

Android मानक जावा थ्रेड्स का समर्थन करता है। आप बैकग्राउंड में एक्शन डालने के लिए java.util.concurrent से मानक थ्रेड्स और टूल्स का उपयोग कर सकते हैं। केवल सीमा यह है कि आप पृष्ठभूमि प्रक्रिया से UI को सीधे अपडेट नहीं कर सकते हैं।

यदि आपको पृष्ठभूमि कार्य से यूआई को अपडेट करने की आवश्यकता है, तो आपको कुछ एंड्रॉइड विशिष्ट वर्गों का उपयोग करने की आवश्यकता है। आप इसके लिए क्लास android.os.Handler का उपयोग कर सकते हैं या क्लास के AsyncTasks का उपयोग कर सकते हैं।

अधिक जानकारी के लिए कृपया नीचे दिए गए लिंक को देखें…।

http://mindstick.com/Articles/7a9205de-bae7-48ba-81b5-2b2ec161d672/?Thread%20in%20Android

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.