Menjeda game di dalam loop game

12

Di dalam loop game, game dijeda dengan menekan P, artinya loop game tidak berjalan lagi. Masalahnya adalah bahwa setelah loop ini dihentikan, P tidak dapat ditekan lagi untuk melanjutkan loop, karena itu berada di dalam loop itu sendiri. Bagaimana membuatnya sehingga ketika P ditekan lagi itu membuat loop bekerja lagi?

GSquadron
sumber

Jawaban:

20

Jangan benar-benar menghentikan lingkaran game saat menjeda permainan. Sebagai gantinya, Anda harus menambahkan variabel bool, yang diubah ke true / false tergantung jika game dijeda. Jika game dijeda, Anda hanya perlu berhenti memperbarui game, tetapi Anda masih dapat terus merender frame saat ini termasuk mendapatkan pembaruan dari input.

if(gameIsPaused == false)
{
    // run updates
}
checkInput();
render();
Katu
sumber
Anda mungkin ingin memiliki checkInputfungsi berbeda untuk mode yang dijeda dan mode yang tidak digunakan, karena mungkin ada beberapa kontrol yang hanya tersedia dalam satu mode atau yang lain. The checkInputfungsi untuk mode dihentikan sementara mungkin melakukan apa-apa lebih dari mencari jika Pditekan dan kemudian mengatur gameIsPaused = false, tetapi beberapa game juga menempatkan tambahan fungsi pada layar jeda (di tahun 90-an itu populer untuk memiliki layar jeda sebagai masukan tersembunyi untuk cheat codes, modern game suka menggabungkannya dengan layar menu).
Philipp
1
Meskipun secara umum saya setuju dengan jawaban Anda, saya pikir itu harus secara eksplisit dinyatakan bahwa kadang-kadang sangat valid untuk menjalankan beberapa pembaruan dalam keadaan dijeda. Misalnya, menghidupkan item menu atau mungkin beberapa manajemen audio. Gagasan besarnya adalah bahwa kondisi jeda memungkinkan Anda untuk bercabang ke set lain dari checkInput/ render/ updatepanggilan.
Nicholas Miller
Satu-satunya hal yang menghentikan permainan harus diubah adalah bahwa bit "perbarui dunia" harus dilewati. Semua fungsi lain mungkin harus tetap seperti biasa.
Mooing Duck
4
Saya mencoba untuk menjaga jawabannya sesederhana mungkin, karena ini adalah hal yang sangat mendasar dalam pemrograman game dan saya tidak ingin membingungkan penanya.
Katu
1
@ user3730788: Cabang yang dieksekusi sekali per loop game (yaitu kurang dari 100 kali per detik) tidak akan memiliki dampak kinerja yang dapat dilihat, bahkan jika itu salah diprediksi setiap saat .
Ilmari Karonen
1

Buat sedemikian rupa sehingga menekan P beralih ke loop lain yang menangani status permainan "Dijeda" dan memungkinkan untuk beralih kembali ke loop game asli dengan menekan P lagi.

Anda benar-benar dapat memasukkan semua ini ke dalam loop game itu sendiri dan memperkenalkan variabel status, jika Anda ingin dan bukannya mematikan loop, variabel status beralih di antara pelaksanaan kode khusus negara masing-masing dalam loop.

Haf
sumber