मैं एक पुराना स्कूल ASCII डॉस-प्रॉम्प्ट गेम लिख रहा हूं। ईमानदारी से मैं गेम डिजाइन के इस ब्रांड के बारे में अधिक जानने के लिए जेडजेडटी का अनुकरण करने की कोशिश कर रहा हूं (भले ही यह पुरातन है)एएससीआईआई डॉस गेम्स - रेंडरिंग विधियां
मैं अच्छा कर रहा हूं, काम करने के लिए मेरा पूर्ण-स्क्रीन टेक्स्ट मोड मिला और मैं दुनिया बना सकता हूं और स्थानांतरित कर सकता हूं समस्याओं के बिना चारों ओर लेकिन मुझे अपने प्रस्तुतकर्ताओं के लिए एक सभ्य समय विधि नहीं मिल रही है।
मैं जानता हूँ कि मेरी प्रतिपादन और पूर्व प्रतिपादन कोड तेजी से है, क्योंकि अगर मैं किसी भी देरी() s या नहीं जोड़ते हैं (घड़ी() - renderBegin)/से time.h renders CLK_TCK चेकों blazingly तेजी से कर रहे हैं।
मैं देरी() का उपयोग नहीं करना चाहता क्योंकि यह मेरे ज्ञान प्लेटफार्म के लिए विशिष्ट है और इसके शीर्ष पर मैं देरी के दौरान कोई कोड नहीं चला सकता (उपयोगकर्ता इनपुट और प्रसंस्करण की तरह)। तो मैंने ऐसा कुछ करने का फैसला किया:
do {
if(kbhit()) {
input = getch();
processInput(input);
}
if(clock()/CLOCKS_PER_SEC-renderTimer/CLOCKS_PER_SEC > RenderInterval) {
renderTimer = clock();
render();
ballLogic();
}
}while(input != 'p');
"सिद्धांत" में कौन सा होना चाहिए ठीक है। समस्या यह है कि जब मैं इस कोड को चलाता हूं (RenderInterval को 0.0333 या 30fps पर सेट करता है) मुझे 30fps के करीब कोई भी नहीं मिलता है, मुझे अधिकतम 18 की तरह मिलता है।
मैंने सोचा कि शायद मैं रेंडरइंटरवाल को 0.0 पर सेट करने का प्रयास करूँगा यह देखने के लिए कि क्या प्रदर्शन खराब हो गया है ... ऐसा नहीं हुआ। मैं (0.0 के रेंडर इंटरवल के साथ) अधिकतम ~ 18-20fps पर प्राप्त कर रहा था।
हालांकि शायद मैं इन सभी घड़ी() को लगातार कॉल कर रहा हूं और "इसे उस से विभाजित कर सकता हूं" तरीकों से मैं सीपीयू को कुछ डरावना कर रहा था, लेकिन जब मैंने रेंडर और बॉल लॉजिक को कथन के ब्रैकेट से बाहर ले लिया और रेंडरइंटरवाल को 0.0 तक सेट करें, मैं फिर से, तेजी से तेजी से प्रस्तुत करता हूं।
यह मेरे लिए बाध्य नहीं करता है क्योंकि अगर मैंने चेक किया है, तो क्या यह धीमी गति से नहीं चलना चाहिए? मेरा मतलब है कि यह अभी भी सभी गणना करने के लिए
BTW मैं Borland के टर्बो सी के साथ संकलन कर रहा हूँ ++ V1.01 है
Zzt! मुझे वह खेल पसंद आया। – caf
आप और मैं दोनों, कैफ। ('# थ्रोस्टार खोज ')। @ Parad0x13: यदि आप डॉस से दूर जाने से परहेज नहीं करते हैं, तो मैं एक पुस्तकालय लिखा एसडीएल द्वारा समर्थित किसी भी मंच पर इस ग्राफिक शैली का अनुकरण करने: http://libfake437.googlecode.com –
आप 'घड़ी से परिणाम बंद संग्रहीत करते हैं () '(घड़ी (यह और संग्रहीत मूल्य) सबसे तेजी से कोड कोड आप कॉल नहीं करते है और इसे और अधिक सटीक हो जाएगा (अन्यथा आप जब आप पहली बार कहा जाता है के बीच के समय को खोना) असाइन करते हैं, आप इसे करने के लिए एक कॉल की बचत होगी' ' , सभी गणित किया और शाखा संभाला)। सटीकता का यह नुकसान गेम को धीमा कर देगा जो आप चाहते हैं, भले ही आप अब सीपीयू उपयोग को अधिकतम नहीं कर रहे हों। (संपादित करें: हाहा, बस इस तारीख को देखा, ओह ठीक है) –