কোনও গেম লুপটি স্থির বা পরিবর্তনশীল সময়ের ধাপের ভিত্তিতে হওয়া উচিত? এক কি সর্বদা উচ্চতর, বা সঠিক পছন্দটি খেলা অনুসারে আলাদা হয়?
পরিবর্তনশীল সময় পদক্ষেপ
পদার্থবিজ্ঞানের আপডেটগুলি "শেষ আপডেটের পর থেকে সময় কেটে যায়" আর্গুমেন্ট কেটে যায় এবং তাই ফ্রেমরেট-নির্ভর। এর অর্থ হিসাবে গণনা করা position += distancePerSecond * timeElapsed
।
পেশাদাররা : মসৃণ, সহজ কোড করার জন্য
কনস : খুব ছোট বা বড় পদক্ষেপ এ অ নির্ণায়ক অনিশ্চিত
ডিওয়াইটারগুলির উদাহরণ:
while( game_is_running ) {
prev_frame_tick = curr_frame_tick;
curr_frame_tick = GetTickCount();
update( curr_frame_tick - prev_frame_tick );
render();
}
স্থির সময় পদক্ষেপ
আপডেটগুলি একটি "সময় অতিবাহিত" এমনকি গ্রহণও করতে পারে না, কারণ তারা ধরে নেয় যে প্রতিটি আপডেট নির্দিষ্ট সময়সীমার জন্য। হিসাবে গণনা করা যেতে পারে position += distancePerUpdate
। উদাহরণস্বরূপ রেন্ডার চলাকালীন একটি অন্তরঙ্গকরণ অন্তর্ভুক্ত।
পেশাদাররা : পূর্বাভাসযোগ্য, ডিটারমিনিস্টিক (নেটওয়ার্ক সিঙ্ক করা সহজ?), পরিষ্কার গণনা কোড
কনস : ভি-সিঙ্ক নিরীক্ষণের জন্য সিঙ্ক করা হয়নি (আপনি বিভাজন না করলে জিটারি গ্রাফিক সৃষ্টি করে), সীমিত সর্বাধিক ফ্রেম রেট (যদি আপনি বিভাজন না করেন), ফ্রেমওয়ার্কের মধ্যে কাজ করা শক্ত পরিবর্তনশীল সময়ের পদক্ষেপগুলি ( পাইগলেট বা ফ্লিক্সেলের মতো ) ধরে নিন
ডিওয়াইটারগুলির উদাহরণ:
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 );
}
কিছু সংস্থান
- গেমগুলিতে গ্যাফার: আপনার টাইমস্টেপ ঠিক করুন!
- ডিউইটারের গেম লুপ নিবন্ধ
- ভূমিকম্প 3 এর এফপিএস লাফ পদার্থবিজ্ঞানকে প্রভাবিত করে - এর কারণ হিসাবে ডুম 3 60-এফএস -এ ফ্রেম-লক করা আছে?
- ফ্লিক্সেলের একটি পরিবর্তনশীল টাইমস্টেপ প্রয়োজন (আমার মনে হয় এটি ফ্ল্যাশ দ্বারা নির্ধারিত হয়) তবে ফ্ল্যাশপঙ্ক উভয় প্রকারের অনুমতি দেয়।
- বক্স 2 ডি-এর ম্যানুয়াল Box বক্স 2 ডি ওয়ার্ল্ডের সিমুলেটিংয়ের পরামর্শ দেয় এটি ধ্রুবক সময় পদক্ষেপগুলি ব্যবহার করে।