Saya sedang mengembangkan game di mana labirin acak disertakan.
Ada beberapa makhluk AI, mengintai labirin. Dan saya ingin mereka pergi di beberapa jalur sesuai dengan bentuk labirin.
Sekarang ada dua kemungkinan bagi saya untuk mengimplementasikan itu, cara pertama (yang saya gunakan) adalah dengan menghitung beberapa jalur yang diinginkan bersembunyi setelah labirin dibuat.
Yang kedua, adalah dengan menghitung jalur yang perlu dihitung, ketika makhluk mulai mengintai itu.
Perhatian utama saya adalah waktu pemuatan. Jika saya menghitung banyak jalur saat membuat labirin, waktu pemuatan pra agak lama, jadi saya berpikir untuk menghitungnya saat diperlukan.
Saat ini gim ini tidak 'berat' sehingga menghitung jalur di pertengahan gim tidak terlihat, tapi saya khawatir itu akan menjadi lebih rumit.
Setiap saran, komentar, opini, akan sangat membantu.
Edit:
Seperti untuk saat ini, mari p
menjadi jumlah jalur yang dihitung sebelumnya, seekor makhluk memiliki kemungkinan 1/p
untuk mengambil jalur baru (yang berarti perhitungan jalur) alih-alih jalur yang ada.
Makhluk tidak memulai patrolinya sampai jalannya dihitung sepenuhnya tentu saja, jadi tidak perlu khawatir tentang dia terbunuh dalam proses.
Jawaban:
BerickCook telah mengungkapkan gagasan itu dengan benar. Tinggalkan perhitungan di mana mereka berada jika mereka bekerja dengan baik sekarang.
Jika Anda dapat melakukan perhitungan sebelumnya dan Anda yakin tidak akan membutuhkannya di tengah permainan, maka lakukanlah sebelumnya. Lain lakukan setelah memuat. Jika perhitungan selama pertandingan tidak terlalu mencolok, Anda bisa melakukannya di sana. Jika pada suatu titik kompleksitas berkembang dan perhitungan menjadi terlalu berat, mulailah mengoptimalkan.
Tetapi satu hal: jika perhitungan Anda diterapkan untuk menjalankan mid game, Anda selalu dapat memaksanya untuk dilakukan selama memuat.
Ada banyak solusi:
Saya telah melihat dan menggunakan opsi terakhir dalam permainan pasar massal. Cukup pastikan Anda menyimpan dengan benar semua data yang diperlukan untuk melanjutkan perhitungan, dan memeriksa secara teratur untuk sisa waktu / operasi selama perhitungan.
Tergantung pada kasus Anda, sistem interruptible dapat memberikan solusi awal dan parsial yang dapat digunakan acara sebelum perhitungan berakhir.
Edit : menjawab @Keeper
"Algoritma interruptible" hanya berguna karena kendala yang kami miliki. Pada dasarnya kami merenungkan kurangnya multithreading.
Pada satu titik kami memiliki permainan di mana AI harus menghitung sejumlah besar langkah berdasarkan beberapa kamus. Selama perhitungan ini semua animasi akan berhenti karena kamus diperluas dengan lebih banyak data dan dataset yang menyimpan data diubah dan kurang efisien ketika permainan diadaptasi untuk multipemain (di mana AI harus berinteraksi bahkan untuk pergerakan pemain). Kami hanya memiliki satu utas yang tersedia untuk loop game (yang penting adalah kode multi-platform harus dijalankan pada semua platform yang didukung). Pada titik ini diputuskan untuk memutus algoritma perhitungan sehingga kami dapat menginterupsinya. Oleh karena itu kami tidak bisa hanya menggunakan sistem rekursif yang ada karena variabel tidak dapat disimpan. Fungsi diganti dengan objek yang hanya menampung semua variabel dan pointer yang diperlukan untuk objek induk dan anak. Saya tidak
Hanya operasi yang paling mahal dipecah menjadi objek yang terpisah dan butuh beberapa waktu untuk menemukan tempat yang tepat di mana kita bisa menghentikan perhitungan, tetapi pada akhirnya itu bekerja dengan sangat baik.
Kami kehilangan kinerja, tetapi kinerja yang dirasakan jauh lebih baik bagi pengguna karena animasi berjalan lancar di semua platform, semua platform kemudian dapat menggunakan kamus yang lebih besar tanpa menderita animasi berombak atau macet. Juga ini memungkinkan kami untuk menjalankan beberapa instance secara paralel ketika kami membutuhkannya nanti.
Tentu saja sekarang di iPhone dan iPad gim tidak membutuhkan ini, menggunakan utas kedua akan ideal. Tapi saya curiga kodenya masih ada.
sumber
Untuk saat ini, karena menghitung jalur tengah permainan tidak terlalu mencolok, itulah pendekatan yang ideal. Jika / ketika sampai ke titik di mana gameplay terganggu oleh perhitungan, maka alihkan untuk menghitung setiap lintasan sebelum level dimuat.
Waktu pemuatan awal yang lebih lama dapat dimaafkan, tetapi fluktuasi FPS acak selama bermain biasanya tidak.
sumber
Satu kemungkinan jika Anda membutuhkannya adalah memindahkan perhitungan ke utas kedua karena hampir setiap PC memiliki lebih dari satu inti CPU saat ini.
Proses dasarnya adalah:
Anda juga harus berhati-hati dengan beberapa kasus tepi tambahan (mis., Bagaimana jika makhluk itu mati sebelum permintaan diproses).
sumber