এর সহজ উত্তরটি হ'ল না, আপনি এমন গেমটিতে গ্লুটআইডলফ্যাঙ্ক কলব্যাক ব্যবহার করতে চান না যা কিছু সিমুলেশন রয়েছে। এর কারণ হ'ল এই ফাংশনটি অ্যানিমেশনটিকে ডিভোর্স দেয় এবং উইন্ডো ইভেন্ট হ্যান্ডলিং থেকে কোড আঁকায় তবে অ্যাসিঙ্ক্রোনালি নয়। অন্য কথায়, উইন্ডো ইভেন্টগুলির স্টলগুলি গ্রহণ ও হস্তান্তর কোড আঁকবে (বা আপনি এই কলব্যাকটিতে যা কিছু রেখেছেন) এটি একটি ইন্টারেক্টিভ অ্যাপ্লিকেশন (ইন্টারেক্ট, তারপর প্রতিক্রিয়া) জন্য পুরোপুরি ঠিক আছে, তবে এমন কোনও গেমের জন্য নয় যেখানে পদার্থবিজ্ঞান বা গেমের অবস্থার উন্নতি করতে হবে মিথস্ক্রিয়া বা সময় রেন্ডার স্বাধীন।
আপনি ইনপুট হ্যান্ডলিং, গেমের অবস্থা এবং কোড আঁকতে সম্পূর্ণভাবে ডিকুয়াল করতে চান। এর একটি সহজ এবং পরিষ্কার সমাধান রয়েছে যা গ্রাফিক্স লাইব্রেরিতে সরাসরি জড়িত না (যেমন এটি পোর্টেবল এবং ভিজ্যুয়ালাইজ করা সহজ); আপনি পুরো গেমের লুপটি সময় উত্পন্ন করতে চান এবং সিমুলেশনটি উত্পাদিত সময়টি গ্রাস করতে চায় (খণ্ডে)। তবে কীটি হ'ল আপনার অ্যানিমেশনটিতে আপনার সিমুলেশনটি যে পরিমাণ সময় ব্যয় করেছিল তা একীভূত করা।
আমি এটির সেরা ব্যাখ্যা এবং টিউটোরিয়ালটি পেয়েছি হ'ল গ্লেন ফিডলার এর ফিক্স ইয়োর টাইমস্টেপ
এই টিউটোরিয়ালে সম্পূর্ণ ট্রিটমেন্ট রয়েছে, তবে আপনার যদি প্রকৃত পদার্থবিজ্ঞানের সিমুলেশন না থাকে তবে আপনি সত্য সংহতটি এড়িয়ে যেতে পারেন তবে বেসিক লুপটি এখনও সিদ্ধ হয়ে যায় (ভার্জোজ সিউডো কোডে):
// The amount of time we want to simulate each step, in milliseconds
// (written as implicit frame-rate)
timeDelta = 1000/30
timeAccumulator = 0
while ( game should run )
{
timeSimulatedThisIteration = 0
startTime = currentTime()
while ( timeAccumulator >= timeDelta )
{
stepGameState( timeDelta )
timeAccumulator -= timeDelta
timeSimulatedThisIteration += timeDelta
}
stepAnimation( timeSimulatedThisIteration )
renderFrame() // OpenGL frame drawing code goes here
handleUserInput()
timeAccumulator += currentTime() - startTime
}
এটি এইভাবে করে, আপনার রেন্ডার কোড, ইনপুট হ্যান্ডলিং বা অপারেটিং সিস্টেমের স্টলগুলি আপনার গেমের রাজ্যের পিছনে পড়বে না। এই পদ্ধতিটি বহনযোগ্য এবং গ্রাফিক্স লাইব্রেরি স্বাধীন।
GLUT একটি সূক্ষ্ম গ্রন্থাগার তবে এটি কঠোরভাবে ইভেন্ট চালিত। আপনি কলব্যাকগুলি নিবন্ধভুক্ত করুন এবং প্রধান লুপটি বন্ধ করুন। আপনি সর্বদা GLUT ব্যবহার করে আপনার প্রধান লুপটির নিয়ন্ত্রণ হস্তান্তর করেন। এর চারপাশে হ্যাকস রয়েছে , আপনি টাইমার এবং এ জাতীয় ব্যবহার করে একটি বাহ্যিক লুপ জালও করতে পারেন, তবে অন্য একটি লাইব্রেরি সম্ভবত আরও ভাল (সহজ) যাওয়ার উপায়। এখানে অনেকগুলি বিকল্প রয়েছে, এখানে কয়েকটি (ভাল ডকুমেন্টেশন এবং দ্রুত টিউটোরিয়াল সহ) রয়েছে:
- জিএলএফডাব্লু যা আপনাকে ইনপুট ইভেন্টগুলি ইনলাইন (আপনার নিজস্ব প্রধান লুপে) পাওয়ার ক্ষমতা দেয়।
- এসডিএল , তবে এর জোর বিশেষভাবে ওপেনএল নয়।