Saya sedang mengerjakan game balapan mobil dan baru saja mengimplementasikan sprite hantu untuk mengulang balapan sebelumnya. Saya menggunakan mesin fisika dan setelah banyak membaca saya sampai pada kesimpulan bahwa cara terbaik untuk menyimpan data hantu untuk replay adalah dengan merekam posisi dan rotasi mobil pada titik waktu tertentu, seperti misalnya dijelaskan di sini: https: // gamedev. stackexchange.com/a/8380/26261 .
Tapi apa cara yang baik untuk menemukan titik waktu selama replay? Contoh akan menjadi catatan dengan data ini:
time: +3.19932 (seconds since race start)
position: 180,40 (position at that time)
rotation: 30.4 (rotation at that time)
Tapi saya punya beberapa masalah dengan itu:
Ketika saya memutar ulang, tidak mungkin saya mencapai titik waktu yang tepat di 3.19932 lagi - lebih mungkin, saya akan memiliki titik waktu sekitar 3.1 dan harus menemukan catatan pencocokan terdekat. Saat interpolasi, bahkan pencocokan terdekat di atas dan di bawah. Ini kedengarannya sangat tidak efisien dan memakan waktu?
Di struktur daftar mana saya bisa menyimpan catatan ini untuk pemutaran ulang nanti? Array? Bukankah itu berarti bahwa waktu pencarian untuk catatan yang cocok dengan waktu tertentu akan meningkat semakin lama balapan?
Frekuensi mana yang harus saya gunakan untuk titik waktu? Setiap frame akan menjadi - saya kira - berlebihan, bukan saya harus menyimpan yaitu setiap frame n dan interpolasi di antaranya, yang membuat pertanyaan penyimpanan di 2. bahkan lebih sulit.
Jadi, apakah gagasan ini bahkan merupakan pendekatan yang tepat? Jika ya, bagaimana saya bisa menyimpan dan mengambil data secara efisien? Harap dicatat bahwa saya biasanya ingin menggunakan struktur data di atas, bukan gamestate deterministik dan merekam input pengguna, dll.
Terima kasih atas bantuannya!
EDIT: Saya sadar saya harus menggambarkan lingkungan yang saya gunakan: Cocos2D untuk iPhone. Ada sebuah metode update:(ccTime)delta
. Idealnya, metode ini akan dipanggil setiap 1/60 detik, tetapi tidak ada jaminan - delta
adalah waktu yang sebenarnya berlalu sejak gametick terakhir dan bisa lebih atau kurang dari 1/60. Dalam metode ini saya ingin menyimpan gamestate saat ini.