Pygame की फ़्रेम दर को तेज़ बनाएं


10

अपने खेल की रूपरेखा तैयार करके, मैं देखता हूं कि मेरे शौक के खेल के निष्पादन के समय का अधिकांश भाग ब्लिट और फ्लिप कॉल के बीच है। वर्तमान में, यह केवल लगभग 13fps पर चल रहा है। मेरा वीडियो कार्ड काफी सभ्य है, इसलिए मेरा अनुमान है कि pygame इसका उपयोग नहीं कर रहा है।

किसी को भी किसी भी ग्राफिक्स / प्रदर्शन विकल्पों के बारे में पता है मुझे इसे और तेज़ बनाने के लिए pygame में सेट करने की आवश्यकता है? या यह सिर्फ कुछ है जिसे मुझे pygame को चुनने के बाद से जीना है?

जवाबों:


12

यदि आप फ़ुल-स्क्रीन मोड में चल रहे हैं, तो pygame.HWSURFACEजब आप हार्डवेयर सतह का उपयोग करने के लिए pygame को बताने के लिए डिस्प्ले को इनिशियलाइज़ करते हैं तो आप ध्वज का उपयोग कर सकते हैं । मेरा मानना ​​है कि यदि हार्डवेयर सतह का उपयोग नहीं किया जा सकता है, तो pygame चुपचाप एक सॉफ़्टवेयर सतह का उपयोग करेगा।

यदि आप हार्डवेयर सतह का उपयोग नहीं कर रहे हैं, pygame.display.update(rectangle)तो इसके बजाय का उपयोग करने पर विचार करें pygame.display.flip()। यह केवल दिए गए आयत को पूरे प्रदर्शन के बजाय अपडेट करेगा, जो आपके प्रदर्शन को थोड़ा बढ़ा सकता है जब तक कि आपके खेल को वास्तव में पूरे प्रदर्शन को अपडेट करने की आवश्यकता न हो।

यदि आप एक हार्डवेयर या OpenGL सतह का उपयोग कर रहे हैं, तो pygame.DOUBLEBUFहार्डवेयर डबल बफरिंग का उपयोग करने वाला भी है , जिसका अर्थ है कि आपके ड्राइंग फ़ंक्शन दो बफ़र्स में से एक में आकर्षित flip()होंगे और स्वैप करेंगे जो बफर दिखाई दे रहा है।


5

Pygame में एक अड़चन वास्तव में फ़ॉन्ट रेंडरिंग है। आपको एक ही टेक्स्ट (एक ही फ़ॉन्ट / रंग के साथ) को एक से अधिक बार रेंडर नहीं करना चाहिए, बल्कि एक बार रेंडर किए गए सतहों को कैश करना चाहिए और उनका पुन: उपयोग करना चाहिए। यदि आप Font.render () का उपयोग कर रहे हैं तो इसे एकांत में ले जाएं।


4

लोंगजॉश के जवाब के अलावा, मैं कुछ और सुझाव देना चाहूंगा:

जहाँ भी संभव हो, घूमने और स्केलिंग से बचें। इस तरह के संचालन को पूरी तरह से सीपीयू पर किया जाता है और यह बहुत धीमा हो जाता है।

यदि आप डायरेक्ट पिक्सेल पढ़ रहे हैं / संशोधन कर रहे हैं Surface.get_buffer(), तो Surface.set_at()/get_at()विधियों का उपयोग करने के बजाय विधि का उपयोग करें और उसी के साथ काम करें ।


2

आपके पास किसी भी परीक्षण कंसोल आउटपुट पर टिप्पणी करें। यह काफी हद तक फ्रैमरेट को कम कर सकता है, खासकर यदि आप रोटेशन और स्केलिंग के बीच आउटपुट कर रहे हैं, जैसा कि कोडी ने ऊपर कहा था।


2

यह सही है कि Pygame आपके वीडियो कार्ड की 3D त्वरण क्षमताओं का उपयोग नहीं करता है। ऐसा इसलिए है क्योंकि यह SDL पर आधारित है जिसमें समान सीमा है। एक विकल्प यह है कि आप अपने गेम को फिर से पाइलेट जैसी प्रणाली में फिर से लिखें, जो ओपनग्लिट त्वरित स्प्राइट्स का समर्थन करता है , केवल ग्राफिक्स के लिए एक समान लाइब्रेरी खोजने के लिए, या इसके लिए खुद ओएनजीसीएल कोड लिखने के लिए।


पैगलेट महान है।
कम्युनिस्ट डक

1

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

 import psyco
 psyco.full()

दौड़ना शुरू करने के लिए, आप इसे आज़मा सकते हैं।


साइको वास्तव में आधुनिक मुहावरेदार पायथन कोड के साथ ज्यादा मदद नहीं करेगा। यदि आप एक JIT चाहते हैं, तो PyPy का उपयोग करें (यह सुनिश्चित नहीं है कि PyGame हालांकि काम कर रहा है)।
कोडरंगर

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