Evet, tek bir iş parçacığında yapmak mümkündür. Genel olarak konuşursak, nesneleri sadece yedek döngüler olduğunda değil, her karede güncellemek istersiniz. Animasyonlarınız ve hareketiniz kare hızından ayrılacak ve eğer yapmazsanız oldukça dalgalı görünecektir. AI güncellemeleri veya gerçek zamanlı olması gerekmeyen başka bir şey hakkında daha fazla konuşuyorsanız, üzerine bir zamanlayıcı koyacağım. Hedef kare hızınızın ne olduğunu bilmelisiniz ve boşta kalma süresi, her şey tamamlandıktan sonra kalan süre olacaktır.
Diyelim ki oyununuz için 60 FPS hedefliyorsunuz. Bu, her kareyi yapmanız gereken tüm işleri gerçekleştirmek için 16.667 ms bırakıyor. Oyunun başında, mevcut en yüksek çözünürlük zamanlayıcısını kullanarak geçerli saati alın, 16.667 ms ekleyin ve bir yerde saklayın. Ben dilde çalıştığımdan bu yana bir süre olmuş olsa da python işlevi zaman () olduğunu düşünüyorum. İşleminiz tamamlandıktan sonra, geçerli saati kaydettiğiniz zamana göre kontrol eden bir döngü girin. Geçerli saat kare bitiş saatinden azsa update_a_very_small_amount. Küçük güncellemenizin hızlı bir şekilde işlenmesi gerektiğinden, işlemin çerçevenin sonundan geçmesinden endişe etmem. Bir sonraki karenin başlangıcı için sadece küçük bir gecikme olurdu ve bunu idare etmek için yeterli boş zamanınız var gibi görünüyor.
Çerçevenin işlenmesi bittikten sonra, bir sonraki çerçevenin sonunun nerede olması gerektiğini bulmak için son çerçevenin sonu için saklanan süreye 16.667 ms ekleyin. Geçerli saati + 16.667 ms kullanırsanız ve işlem biterse, bir sonraki çerçevenin sonu son çerçevenin geçtiği zamana kadar dışarı itilir.
Ynt: İkinci Düzenleme
Açıklığa kavuşturmak için, ana döngü boyunca bir yinelemeyi belirtmek için burada kare hızı terimini kullanıyorum. Kullanıcının giriş hızına dayanıyorsa, amacınızın sadece oyunu duyarlı hissetmek olduğunu düşünüyorum. Aksi takdirde, giriş olup olmadığını kontrol edebilir ve 10 saniye sürse bile döngüdeki her şeyi güncelleyebilirsiniz. Gerçi duyarlı hissetmek için, muhtemelen bu kareleri çizmiyor olsanız bile, saniyede yaklaşık 20 kez girişi kontrol etmek isteyeceksiniz. Bu, girişi tekrar kontrol etmeniz gerekmeden önce şeyleri güncellemeniz için 50 ms verir.