गेम लूप को निश्चित या परिवर्तनीय समय चरणों पर आधारित होना चाहिए? क्या कोई हमेशा श्रेष्ठ होता है, या सही विकल्प खेल से भिन्न होता है?
चर समय कदम
भौतिकी के अपडेट को "अंतिम अपडेट के बाद से बीता हुआ समय" तर्क के रूप में पारित किया जाता है और इसलिए फ्रैमर्ट-डिपेंडेंट होता है। इसका अर्थ हो सकता है कि गणना करना position += distancePerSecond * timeElapsed
।
पेशेवरों : चिकनी, कोड को आसान करने के लिए
विपक्ष : गैर-नियतात्मक, बहुत छोटे या बड़े चरणों में अप्रत्याशित
deWiTTERS उदाहरण:
while( game_is_running ) {
prev_frame_tick = curr_frame_tick;
curr_frame_tick = GetTickCount();
update( curr_frame_tick - prev_frame_tick );
render();
}
निश्चित समय कदम
अद्यतनों को "समय बीतने" को भी स्वीकार नहीं किया जा सकता है, क्योंकि वे मानते हैं कि प्रत्येक अद्यतन एक निश्चित समय अवधि के लिए है। गणना के रूप में किया जा सकता है position += distancePerUpdate
। उदाहरण में रेंडर के दौरान एक प्रक्षेप शामिल है।
पेशेवरों : अनुमानित, नियतात्मक (नेटवर्क सिंक करने में आसान?), स्पष्ट गणना कोड
विपक्ष : वी-सिंक की निगरानी करने के लिए समन्वयित नहीं किया जाता है (जब तक आप प्रक्षेपित नहीं करते हैं तो चिड़चिड़ा ग्राफिक्स का कारण बनता है), सीमित अधिकतम फ्रेम दर (जब तक आप प्रक्षेप नहीं करते), चौखटे के भीतर काम करने के लिए कठिन चर समय कदम (जैसे मान Pyglet या Flixel )
deWiTTERS उदाहरण:
while( game_is_running ) {
while( GetTickCount() > next_game_tick ) {
update();
next_game_tick += SKIP_TICKS;
}
interpolation = float( GetTickCount() + SKIP_TICKS - next_game_tick )
/ float( SKIP_TICKS );
render( interpolation );
}
कुछ संसाधन
- खेलों पर Gaffer: अपने टाइमस्टेप को ठीक करें!
- deWitter का गेम लूप लेख
- क्वेक 3 का एफपीएस जंप फिजिक्स को प्रभावित करता है -क्योंकि एक कारण कयामत 3 फ्रेम-लॉक 60fps है?
- फ्लिक्सल को एक चर टाइमस्टेप की आवश्यकता होती है (मुझे लगता है कि यह फ्लैश द्वारा निर्धारित किया जाता है) जबकि फ्लैशपंक दोनों प्रकार की अनुमति देता है।
- Box2D का मैनुअल D Box2D की दुनिया का अनुकरण करना यह बताता है कि यह निरंतर समय चरणों का उपयोग करता है।