मुझे मुख्य गेम लूप कैसे लिखना चाहिए? [बन्द है]


130

मुझे मुख्य गेम लूप कैसे लिखना चाहिए? गेम लूप में आपको क्या करना चाहिए और गेम लूप में क्या कुछ चीजें हैं जो आपको नहीं करनी चाहिए?

मैंने उनमें से बहुत कुछ लिखा है, लेकिन मैंने कभी गेम लूप पर नहीं पढ़ा है। मुझे यकीन है कि मैं उन्हें काफी सुधार कर सकता हूं, लेकिन मैं अनिश्चित हूं कि कैसे।


4
ईविल उत्तर: आपके लिए यह लूप बनाने के लिए किसी के इंजन का उपयोग करने के बारे में क्या? :)
user712092

आप उपयोगकर्ता से कुल फ़्रेमों की संख्या पूछ सकते हैं जिसे वह चलाने के लिए और बफ़र्स की मात्रा के लिए लूप के लिए उपयोग करना चाहता है।
उयुर गुम्मशान

जवाबों:


121

मुख्य गेम लूप तीन प्रमुख कार्यों को संभालता है:

  1. उपयोगकर्ता इनपुट प्राप्त करें
  2. खेल राज्य अद्यतन करें
  3. खेल ड्रा

एक साधारण गेम लूप इन तीनों कार्यों को लूप करते हुए एक में बदल देता है। इसके कुछ अवांछित परिणाम हैं:

  1. गेम विभिन्न कंप्यूटरों पर अलग-अलग गति से चलता है।
  2. CPU (अनावश्यक रूप से) 100% उपयोग में आ सकता है।
  3. "गेम स्टेट्स" / मेनू गायब हैं या गेम कोड के साथ मिश्रित हैं।
  4. मुख्य गेम लूप बहुत लंबा और बनाए रखने के लिए कठिन है।
  5. अन्य प्लेटफ़ॉर्म पर कोड का विस्तार / पोर्ट करना मुश्किल है।

उन्नत नामांकित लूप ऊपर सूचीबद्ध समस्याओं को संबोधित करते हैं। यहाँ कुछ उपयोगी लेख हैं:

एक उत्कृष्ट उदाहरण गेम लूप के लिए, एलेग्रो स्केटर डेमो गेम देखें:

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


1
हां, जैसा कि संदेह है, मैं निश्चित रूप से सुधार कर सकता हूं। अच्छा पढ़ता है। इसके अलावा, कोड पोस्ट करने के लिए धन्यवाद। इस सामान के साथ वास्तविक गेम कोड देखना बहुत अच्छा है।
होकिसेग्रेड

1
यदि आपके पास कम से कम 2 कोर हैं तो सीपीयू को 100% उपयोग (या 50% से अधिक) पर अटक जाना चाहिए । इसके बारे में सोचो। अगर आप ब्लीडिंग एज फिजिक्स, किलर ग्राफिक्स कैसे प्राप्त करने जा रहे हैं, अगर आप वहां बैठकर खुद से कह रहे हैं "ओह, लेकिन मैं सभी सीपीयू का उपयोग नहीं करना चाहता ।" हां, यदि संभव हो तो आपको 100% CPU का उपयोग करना चाहिए (इसका मतलब है कि आज के कंप्यूटर पर मल्टीथ्रेडिंग है, इसलिए वास्तव में हर समय 4 कोर के 100% का उपयोग करना बहुत मुश्किल है)। जिस मशीन पर आप चल रहे हैं, उसका अधिकतम लाभ उठाएं।
बॉबोबो

5
मुझे एपेंड करने की अनुमति दें: डेस्कटॉप प्रोग्राम के लिए । पोर्टेबल डिवाइस पर, आप बहुत अधिक बैटरी जला रहे हैं, इसलिए आप 100% उपयोग की चीज के बारे में चिंता करेंगे।
बॉबोबो

1
@ user6003859: मैंने लिंक को ठीक कर दिया है।
3

1
एक और उपयोगी लिंक: gameprogrammingpatterns.com/game-loop.html
brita_

51

मैं ग्लेन फिडलर के लेख को मजबूत फ्रामर्ट स्वतंत्रता के बारे में सलाह दूंगा, " अपने टाइमस्टेप को ठीक करें! "

(हाथ में विषय के लिए कम प्रासंगिक, लेकिन श्रृंखला के अन्य लेख भी काफी अच्छे हैं - जैसा कि उसकी साइट पर सब कुछ है)


वे निश्चित रूप से कुछ बहुत अच्छे लेख हैं। पोस्ट करने का शुक्रिया!
होकिसेग्रेड

1
मैं एक मजबूत फ्रैमरेट स्वतंत्र कार्यान्वयन के लिए सिफारिश करता हूं। आपके खेल में सब कुछ एक डेल्टा मूल्य के रूप में लागू किया जाना चाहिए जिसे आप समय-समय पर अपडेट करते हैं। और यह जरूरी नहीं है कि आप उसी समय करें जब आप अगले फ्रेम पर जाएं। वास्तव में, यदि आपने एक फ्रेम को छोड़ दिया है, तो आप शायद 2x अपडेट के साथ अपने अपडेट के तरीकों को कॉल नहीं करना चाहते हैं। एक ही डेल्टा के साथ दो बार अपने अपडेट को कॉल करना अधिक सुसंगत होगा। निश्चित रूप से अपने फ्रैमरेट और अपने अपडेट चक्र के साथ मुद्दों को जानने के लिए समय निकालें। यह आपको बाद में समय बचाएगा।
डेनिस मुंसी

4

यदि आप गेम लूप पर काम करना चाहते हैं, तो मैं मल्टीस्ट्र्रेड गेम इंजन आर्किटेक्चर के बारे में गामासूत्र के इस पुराने लेख को पढ़ने की सलाह दूंगा। यह आपके गेम लूप को लिखने के लिए कई अलग-अलग तरीकों से संबंधित है।

http://www.gamasutra.com/view/feature/1830/multithreaded_game_engine_.php

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