Bir araba yarışı oyunu üzerinde çalışıyorum ve geçmiş yarışları tekrarlamak için bir hayalet sprite uyguladım. Bir fizik motoru kullanıyorum ve çok fazla okuduktan sonra hayalet verilerini tekrar oynatmak için saklamanın en iyi yolunun, örneğin burada açıklandığı gibi verilen zaman noktalarında aracın konumunu ve dönüşünü kaydetmek olduğu sonucuna vardım : https: // gamedev. stackexchange.com/a/8380/26261 .
Ancak, tekrar oynatma sırasında bu zaman noktalarını bulmak için iyi bir yol ne olurdu? Örnek olarak bu verilerle bir kayıt verilebilir:
time: +3.19932 (seconds since race start)
position: 180,40 (position at that time)
rotation: 30.4 (rotation at that time)
Ama bununla ilgili birkaç problemim var:
Tekrar oynattığımda, 3.19932'deki tam zaman noktasına ulaşmam pek olası değil - daha büyük olasılıkla, 3.1 civarında bir zaman noktasına sahip olacağım ve en yakın eşleşen kaydı bulmam gerekecek. İnterpolasyon yaparken, yukarı ve aşağı en yakın eşleşme bile. Kulağa çok verimsiz ve zaman alıcı geliyor?
Daha sonraki bir tekrar için bu liste yapısında hangi kayıtları saklayabilirim? Bir dizi mi? Bu, belirli bir zamanla eşleşen kayıtlar için arama süresinin, yarış ne kadar uzun olursa artacağı anlamına gelmez mi?
Zaman noktaları için hangi frekansı kullanmalıyım? Her kare-sanırım aşırıya kaçabilir, daha çok yani her n. Kareyi kaydetmeli ve aralarında enterpolasyon yapmalıyım, bu da 2. depolama sorularını daha da zorlaştırır.
Peki bu fikir doğru yaklaşım mı? Evetse, verileri nasıl verimli bir şekilde saklayabilir ve alabilirim? Lütfen belirleyici oyun siteleri ve kullanıcı girişlerini kaydetmemek yerine yukarıdaki veri yapısını kullanmak istediğimi unutmayın.
Herhangi bir yardım için teşekkürler!
EDIT: Kullandığım ortamı tanımlamam gerektiğini fark ettim: iPhone için Cocos2D. Bir yöntem var update:(ccTime)delta
. İdeal olarak, bu yöntem her 1/60 saniyede bir çağrılır, ancak garanti yoktur - delta
son oyundan bu yana geçen gerçek süredir ve 1/60'tan çok veya daha az olabilir. Şu anki oyun kasasını saklamak istediğim bu yöntemde.