एक बुनियादी गेम लूप के लिए, आप थोड़ी देर लूप चलाएंगे, जिसके भीतर आपको नैनो टाइम () का उपयोग करके समय मिलेगा, यह निर्धारित करें कि अंतिम फ्रेम के बाद कितना समय बीत चुका है, फिर अपने गेमस्टेट को अपडेट करें और प्रस्तुत करें।
Http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/System.html#nanoTime%28%29 का उपयोग करके आप बीते हुए समय के लिए मतदान कर सकते हैं। मूल रूप से ...
public static void main(String [ ] args)
{
long current_frame_time = system.nanoTime();
long last_frame_time = current_frame_time;
while(gameIsRunning)
{
last_frame_time = current_frame_time;
current_frame_time = system.nanoTime();
long timeTaken = current_frame_time - last_frame_time;
//update and render game here
}
}
इस बुनियादी विधि को बेहतर बनाया जा सकता है, जैसे http://www.koonsolo.com/news/dewitters-gameloop/ और http://gafferongames.com/game-physics/fix-your-timestep/ ।
वैकल्पिक रूप से, आप एक टाइमर बना सकते हैं और अपने अपडेट को चलाने और हर एक्स मिलीसेकंड को रेंडर करने के लिए इस टाइमर को सेट कर सकते हैं। लेकिन, इस तरह एक गेमेलोप के निर्माण के लिए कुछ डाउनसाइड हैं।
Http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.html के अनुसार : " प्रत्येक टाइमर ऑब्जेक्ट के अनुरूप एक सिंगल बैकग्राउंड थ्रेड है जिसका उपयोग सभी टाइमर को निष्पादित करने के लिए किया जाता है। कार्य, क्रमिक रूप से। टाइमर के कार्य जल्दी से पूरा होने चाहिए। यदि टाइमर कार्य को पूरा करने में अत्यधिक समय लगता है, तो यह टाइमर के कार्य निष्पादन थ्रेड को "हॉग" करता है। यह, बदले में, बाद के कार्यों के निष्पादन में देरी कर सकता है, जो कि "गुच्छा अप" हो सकता है। तीव्र उत्तराधिकार में निष्पादित (जब और यदि) अपमानजनक कार्य अंत में पूरा होता है। "
Http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.html#scheduleAtFixedRate%28java.util.TimerTask.%20java.util.Date,%20long%29 : के अनुसार। " निश्चित दर निष्पादन में, प्रत्येक निष्पादन प्रारंभिक निष्पादन के निर्धारित निष्पादन समय के सापेक्ष निर्धारित होता है। यदि निष्पादन किसी भी कारण से विलंबित होता है (जैसे कचरा संग्रह या अन्य पृष्ठभूमि गतिविधि), तो तेजी से उत्तराधिकार में दो या अधिक निष्पादन होंगे। "पकड़ने के लिए।" लंबे समय में, निष्पादन की आवृत्ति निर्दिष्ट अवधि के बिल्कुल पारस्परिक होगी (सिस्टम घड़ी अंतर्निहित Object.wait (लंबे समय तक) सटीक है)। "
चूँकि आप आमतौर पर समय से पहले नहीं जानते हैं कि गेम लूप कितना समय लेता है, अपने गेमो को हर एक्स मिलीसेकंड (लक्ष्य फ्रेम दर के आधार पर) निष्पादित करने के लिए टाइमर सेट करने से कुछ गुच्छेदार फ्रेम हो सकते हैं, जो कि जब भी कोई फ़्रेम निष्पादित होता है। जब कोई फ़्रेम शेड्यूल किया गया हो तो उसके बजाय समाप्त। जब ऐसा होता है ... पहली बार में टाइमर का उपयोग क्यों करें?
अब, मुझे गलत मत समझो, टाइमर एक बुरा वर्ग नहीं है, लेकिन यह आमतौर पर छोटे कार्यों के लिए बेहतर होता है, जिन्हें समय-समय पर या एक निश्चित समय पर करने की आवश्यकता होती है, जैसे एक मेल क्लाइंट हर 5 में नए मेल की जांच करना चाहता है। दौड़ शुरू होने से पहले उलटी गिनती प्रदर्शित करने के लिए मिनटों, या एक काउंटर को हर सेकंड घटाया जा सकता है।