Bagaimana saya harus menulis lingkaran permainan utama? [Tutup]

130

Bagaimana saya harus menulis lingkaran permainan utama? Apa saja hal-hal yang harus Anda lakukan dalam loop game, dan apa hal-hal yang tidak boleh Anda lakukan dalam loop game?

Saya telah menulis banyak dari mereka, tetapi saya tidak pernah benar-benar membaca di loop permainan. Saya yakin saya bisa meningkatkannya secara signifikan, tetapi saya tidak yakin bagaimana caranya.

hokiecsgrad
sumber
4
Jawaban jahat: Bagaimana dengan menggunakan mesin seseorang untuk membuat lingkaran ini untuk Anda? :)
user712092
Anda dapat menanyakan kepada pengguna jumlah total frame yang ingin ia jalankan dan gunakan perulangan for ke n kali jumlah buffer.
Uğur Gümüşhan

Jawaban:

121

Putaran permainan utama menangani tiga tugas utama:

  1. Dapatkan input pengguna
  2. Perbarui status permainan
  3. Draw game

Gim permainan sederhana hanya mengerahkan ketiga tugas ini menjadi satu perulangan. Ini memiliki beberapa hasil yang tidak diinginkan:

  1. Game berjalan dengan kecepatan berbeda di komputer yang berbeda.
  2. CPU (bisa tidak perlu) dipatok pada penggunaan 100%.
  3. "Status permainan" / menu hilang atau dicampur dengan kode permainan.
  4. Main game loop sangat panjang dan sulit untuk dipertahankan.
  5. Kode sulit diperluas / port ke platform lain.

Loop gamed lanjutan mengatasi masalah yang tercantum di atas. Berikut beberapa artikel bermanfaat:

Untuk contoh loop permainan yang luar biasa, lihat game demo skater Allegro:

  • Kode loop game ada di framework.c .
  • Jelajahi kode sumber lengkap di sini .

Loop game sering melakukan jenis pekerjaan yang sama untuk sebagian besar game, jadi saya telah memikirkan cara untuk membuat kerangka kerja game umum. Lebih baik menulis satu implementasi loop game dan membaginya di antara game. Menghemat pekerjaan saat membuat game baru, dan peningkatan pada loop game bersama dapat dibagikan oleh semua game (misalnya, menambahkan penghitung FPS atau fitur tangkapan layar).

Leftium
sumber
1
Yap, seperti yang diduga, saya pasti bisa melakukan perbaikan. Bacaan yang bagus. Juga, terima kasih telah memposting kode. Sangat menyenangkan melihat kode gim yang sebenarnya dengan hal ini.
hokiecsgrad
1
CPU harus macet pada penggunaan 100% (atau lebih seperti 50% jika Anda memiliki setidaknya 2 core). Pikirkan tentang itu. Bagaimana Anda akan mendapatkan fisika mutakhir, grafik pembunuh, jika Anda duduk di sana berkata pada diri sendiri, "Oh, tapi saya tidak ingin menggunakan semua CPU." Ya, Anda harus menggunakan 100% CPU jika memungkinkan (itu artinya multithreading di komputer saat ini, jadi sangat sulit untuk benar-benar menggunakan 100% dari 4 core sepanjang waktu). Dapatkan hasil maksimal dari mesin yang Anda jalankan yang Anda bisa.
bobobobo
5
Izinkan saya menambahkan: Untuk program desktop . Pada perangkat portabel, Anda akan membakar lebih banyak baterai, sehingga Anda khawatir tentang penggunaan 100%.
bobobobo
1
@ user6003859: Saya memperbaiki tautan.
Leftium
1
tautan lain yang bermanfaat: gameprogrammingpatterns.com/game-loop.html
brita_
51

Saya akan merekomendasikan artikel Glenn Fiedler tentang independensi framerate yang kuat, " Perbaiki Waktu Anda! "

(Kurang relevan dengan topik yang dibahas, tetapi artikel lain dalam seri ini juga cukup bagus - seperti semua yang ada di situsnya!)

Neverender
sumber
Itu pasti beberapa artikel yang sangat bagus. Terima kasih untuk posting!
hokiecsgrad
1
Saya kedua rekomendasi untuk memiliki implementasi independen framerate kuat. Semua yang ada di game Anda harus diimplementasikan sebagai nilai delta yang Anda perbarui secara berkala. Dan itu tidak seharusnya dilakukan pada saat yang sama Anda maju ke frame berikutnya. Bahkan, jika Anda melewatkan bingkai, Anda mungkin benar-benar tidak ingin hanya memanggil metode pembaruan Anda dengan delta 2x. Akan lebih konsisten untuk memanggil pembaruan Anda dua kali dengan delta yang sama. Luangkan waktu untuk mempelajari masalah dengan framerate Anda dan siklus pembaruan Anda. Ini akan menghemat waktu Anda nanti.
Dennis Munsie