Ana oyun döngüsünü nasıl yazmalıyım? [kapalı]


130

Ana oyun döngüsünü nasıl yazmalıyım? Oyun döngüsünde yapmanız gereken bazı şeyler ve oyun döngüsünde yapmamanız gereken bazı şeyler nelerdir?

Onlardan pek çok şey yazdım, ama oyun döngülerinde hiç okumadım. Onları önemli ölçüde geliştirebileceğime eminim, ama nasıl emin olamadım.


4
Kötü cevap: Peki bu döngüyü sizin için yapmak için someones motorunu kullanmaya ne dersiniz? :)
user712092

Kullanıcıya çalıştırmak istediği toplam çerçeve sayısını sorabilir ve arabellek miktarının n katı olan bir for döngüsünü kullanabilirsiniz.
Uğur Gümüşhan

Yanıtlar:


121

Ana oyun döngüsü üç ana görevi yerine getirir:

  1. Kullanıcı girişi al
  2. Oyun durumunu güncelle
  3. Oyunu çizmek

Basit bir oyun döngüsü sadece bu üç görevi bir süre döngü içine alır. Bunun istenmeyen bazı sonuçları var:

  1. Oyun farklı bilgisayarlarda farklı hızlarda çalışır.
  2. CPU (gereksiz yere olabilir)% 100 kullanımda sabitlenmiştir.
  3. "Oyun durumları" / menüleri eksik veya oyun koduyla karıştırılmış.
  4. Ana oyun döngüsü çok uzun ve bakımı zordur.
  5. Kodun başka platformlara genişletilmesi / bağlantı yapılması zor.

Gelişmiş oyun döngüleri yukarıda listelenen sorunlara yöneliktir. İşte bazı yararlı makaleler:

Mükemmel bir örnek oyun döngüsü için Allegro patenci demo oyununa bir göz atın:

Oyun döngüleri çoğu oyun için çoğu zaman aynı işi yapar, bu yüzden genelleştirilmiş bir oyun çerçevesi yapmanın bir yolunu düşünüyordum. Bir oyun döngüsünün bir uygulamasını yazmak ve bunu oyunlar arasında paylaşmak daha iyidir. Yeni bir oyun oluştururken iş tasarrufu sağlar ve paylaşılan oyun döngüsündeki iyileştirmeler tüm oyunlar tarafından paylaşılabilir (örneğin, bir FPS sayacı veya ekran yakalama özelliği ekleyerek).


1
Evet, şüphelendiğim gibi kesinlikle iyileştirmeler yapabilirim. Güzel okur. Ayrıca, kodu gönderdiğiniz için teşekkür ederiz. Bu oyun ile gerçek oyun kodunu görmek harika.
hokiecsgrad

1
CPU % 100 kullanımda (veya en az 2 çekirdeğiniz varsa% 50 gibi) takılı kalmalıdır . Bunu düşün. Nasıl bir kenara atıyorsun fizik, katil grafikler, arkada oturuyorsanız kendinize "Ah, ama tüm CPU'yu kullanmak istemiyorum ." Evet, eğer mümkünse CPU'nun% 100'ünü kullanmalısınız (bugünün bilgisayarlarında çoklu okuma anlamına gelir, bu yüzden aslında her zaman 4 çekirdeğin% 100'ünü kullanmak çok zordur). Üzerinde çalıştığınız makineden en iyi şekilde yararlanın.
bobobobo

5
Eklememe izin ver: Masaüstü programları için . Taşınabilir bir cihazda çok daha fazla pil yakıyorsanız,% 100 kullanım konusunda endişelisiniz.
bobobobo

1
@ user6003859: Bağlantıyı düzelttim.
Leftium


51

Glenn Fiedler'in sağlam kare hızı bağımsızlığı hakkındaki makalesini, " Zaman Adımınızı Düzeltin! " Yazmasını tavsiye ederim.

(Eldeki konuyla daha az ilgili, ancak dizideki diğer makaleler de oldukça iyi - onun sitesinde her şey olduğu gibi!)


Bunlar kesinlikle çok iyi makaleler. Gönderdiğiniz için teşekkür ederiz!
hokiecsgrad

1
İkincisi, sağlam bir kare hızına sahip bağımsız bir uygulamaya sahip olma önerisini tavsiye ediyorum. Oyununuzdaki her şey, periyodik olarak güncellediğiniz bir delta değeri olarak uygulanmalıdır. Ve bu mutlaka bir sonraki kareye ilerlerken aynı anda yapılmamalıdır. Aslında, bir çerçeveyi atladıysanız, güncelleme yöntemlerinizi 2x deltayla çağırmak istemezsiniz. Güncelleştirmenizi aynı deltayla iki kez aramak daha tutarlı olur. Kesinlikle kare hızınızla ve güncelleme döngüsüyle ilgili sorunları öğrenmek için zaman ayırın. Size daha sonra zaman kazandıracak.
Dennis Munsie,

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.