Tôi đang làm việc trên một trò chơi đua xe và chỉ thực hiện một sprite ma để phát lại các cuộc đua trong quá khứ. Tôi sử dụng một công cụ vật lý và sau khi đọc nhiều, tôi đã đi đến kết luận rằng cách tốt nhất để lưu trữ dữ liệu ma để phát lại là ghi lại vị trí và vòng quay của ô tô tại các mốc thời gian đã cho, như ví dụ được mô tả ở đây: https: // gamedev. stackexchange.com/a/8380/26261 .
Nhưng điều gì sẽ là một cách tốt để tìm thấy những dấu thời gian trong khi phát lại? Một ví dụ sẽ là một bản ghi với dữ liệu này:
time: +3.19932 (seconds since race start)
position: 180,40 (position at that time)
rotation: 30.4 (rotation at that time)
Nhưng tôi có một số vấn đề với điều đó:
Khi tôi phát lại, không chắc là tôi đạt được mốc thời gian chính xác ở 3.19932 một lần nữa - nhiều khả năng, tôi sẽ có một mốc thời gian khoảng 3.1 và phải tìm bản ghi khớp gần nhất. Khi nội suy, thậm chí khớp gần nhất ở trên và dưới. Điều này nghe có vẻ rất không hiệu quả và tốn thời gian?
Trong cấu trúc danh sách nào tôi có thể lưu trữ các bản ghi này cho lần phát lại sau? Một mảng? Điều đó không có nghĩa là thời gian tìm kiếm hồ sơ phù hợp với một thời gian nhất định sẽ tăng thời gian cuộc đua dài hơn?
Tôi nên sử dụng tần số nào cho các mốc thời gian? Mỗi khung hình sẽ là - Tôi đoán quá mức cần thiết, thay vào đó tôi nên lưu tức là mọi khung hình thứ n và nội suy ở giữa, điều này làm cho các câu hỏi lưu trữ trong 2. thậm chí còn khó khăn hơn.
Vì vậy, ý tưởng này thậm chí là phương pháp đúng? Nếu có, làm thế nào tôi có thể lưu trữ và lấy dữ liệu một cách hiệu quả? Xin lưu ý rằng tôi thường muốn sử dụng cấu trúc dữ liệu ở trên, không phải các trò chơi xác định và ghi lại đầu vào của người dùng, v.v.
Cảm ơn vì bất kì sự giúp đỡ!
EDIT: Tôi nhận ra rằng tôi nên mô tả môi trường tôi sử dụng: Cocos2D cho iPhone. Có một phương pháp update:(ccTime)delta
. Lý tưởng nhất là phương pháp này sẽ được gọi cứ sau 1/60 giây, nhưng không có gì đảm bảo - delta
là thời gian thực tế đã trôi qua kể từ lần giao tử cuối cùng và có thể nhiều hơn hoặc ít hơn 1/60. Đó là trong phương pháp này, nơi tôi muốn lưu trữ các gamestate hiện tại.