2011-06-15 7 views
6

तो मैं एक प्रकार का कण सिम्युलेटर लिख रहा हूं, जैसे कि "गिरने वाली रेत खेल" यदि आप जानते हैं कि यह क्या है, और मैंने एक रोडब्लॉक मारा है अभी व। जिस तरह से मैं यह कर रहा हूं, मेरे पास एक कण वस्तु है जो मूल रूप से अब एक स्थिति (int x, int y) है और यही वह है। जिस तरह से मैं उन्हें खींच रहा/चला रहा हूं, एक थ्रेड और एंड्रॉइड पैनल के लिए ऑन ड्रा घटना के साथ है। प्रत्येक बार ड्रॉ को सभी कणों के माध्यम से लूप कहा जाता है, उन्हें एक पिक्सेल नीचे ले जाएं जब तक कि वे नीचे हिट न करें और फिर उन्हें खींचे, यह लगभग चिकनी होने तक बहुत चिकनी है, फिर एफपीएस महत्वपूर्ण रूप से गिर जाता है। मुझे पता है कि यह गणना कर रहा है जिस तरह से मैं इसे कर रहा हूं, इसके बारे में कोई बहस नहीं है, लेकिन क्या ऐसा कोई तरीका है जिससे मैं इसे और अधिक कणों को खींचा जा सकता हूं और कम अंतराल के साथ ऐसा कर सकता हूं?हजारों कणों (जावा/एंड्रॉइड) ड्राइंग के अधिक कुशल तरीके

अग्रिम धन्यवाद।

उत्तर

0

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

लेकिन जो भी आप चुनते हैं, मुझे लगता है कि आपको एक मजबूत सीमा डालना चाहिए, सभी उपयोगकर्ताओं के पास शक्तिशाली एंड्रॉइड डिवाइस नहीं हैं।

सादर, स्टीफन

2

मैं आप इस के लिए एक व्यक्ति पिक्सेल ड्राइंग समारोह का उपयोग कर रहे इसे ले? वह वास्तव में धीमा होगा।

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

+0

यह एंड्रॉइड के ड्रॉपॉइंट (एक्स, वाई, पेंट) फ़ंक्शन है। – Hamel

0

मुझे लगता है कि अगर कण एक दूसरे के करीब हैं, तो आप ऑब्जेक्ट्स बना सकते हैं जो 3 या अधिक कणों का प्रतिनिधित्व करते हैं।

स्क्रीन पर कई कण प्रदर्शित करते समय, अनाज के सेट शायद अनजान हो जाते हैं।

2

आप OpenGL ES हार्डवेयर त्वरण और renderscript पर देख सकते हैं। यह आपको एक अधिक कुशल समाधान कोड नहीं देता है (इसके लिए अन्य उत्तरों देखें)। हालांकि, इसका उपयोग करने के लिए यह बहुत अधिक प्रोसेसिंग पावर खोलता है। आप GPU पर संभव सिमुलेशन भी चला सकते हैं (संभवतः, आपके कार्यान्वयन विवरण को नहीं जानते)।

संपादित
इसके अलावा, अगर आप अभी भी जावा में प्रसंस्करण करने का फैसला, तो आप Method Profiling in DDMS पर गौर करना चाहिए। इससे आपको यह देखने में मदद मिलेगी कि आपकी प्रदर्शन बाधाएं कहां हैं।

+0

+1: वास्तव में, यहां एकमात्र उचित उत्तर है। ओपनजीएल को इस प्रकार की प्रसंस्करण करने के लिए बिल्कुल डिजाइन किया गया है। – Rekin

2

मैं इस तरह बातें करने से पहले कभी नहीं किया है, लेकिन मैं कुछ जटिल सेलुलर ऑटोमेटा किया है। क्षमा करें अगर यह बहुत अस्पष्ट है।

बुनियादी यहाँ विचार निशान सभी कणों कि "गिरने रखने" चाहिए या "कदम नहीं" और (जटिल प्रसंस्करण से बहिष्कृत एक विशेष लघु/तेजी से "गिरने" सूची के लिए प्रोसेसर के साथ करने के लिए है - आपको बस इतना करना है कि प्रत्येक को एक पिक्सेल से छोड़ दें)।

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

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

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

आशा है कि यह समझ में आता है। एक बार वापस आना एक बार वापस आना और संपादित करना न भूलें!

+0

यह बहुत उपयोगी है, मैं शायद यह करूँगा – Hamel