Я працюю над грою на гоночній машині і просто запровадив привид-привид для відтворення минулих гонок. Я використовую двигун фізики і після багатого прочитання я прийшов до висновку, що найкращим способом зберігання даних привидів для повтору є записування положення та обертання автомобіля в задані часові точки, як, наприклад, описано тут: https: // gamedev. stackexchange.com/a/8380/26261 .
Але який би був хороший спосіб знайти ці моменти часу під час повтору? Прикладом може бути запис із цими даними:
time: +3.19932 (seconds since race start)
position: 180,40 (position at that time)
rotation: 30.4 (rotation at that time)
Але у мене є кілька проблем з цим:
Коли я повторююсь, навряд чи я знову досягну точної точки часу в 3.19932 - швидше за все, у мене з’явиться часова точка близько 3.1 і доведеться знайти найближчий збіг відповідних записів. При інтерполяції навіть найближче співпадання зверху та знизу. Це звучить дуже неефективно і забирає багато часу?
У якій структурі списку я можу зберігати ці записи для подальшого перегляду? Масив? Чи це не означає, що час пошуку записів, що відповідають певному часу, збільшуватиметься, чим довше буде гонка?
Яку частоту слід використовувати для часових точок? Кожен кадр був би - я здогадуюсь - надмірним, а я повинен зберігати, тобто, кожен n-й кадр та інтерполювати між ними, що ускладнює питання зберігання у 2. ще складніше.
Тож ця ідея навіть правильний підхід? Якщо так, то як я можу ефективно зберігати та отримувати дані? Зауважте, що я, як правило, хотів би використовувати структуру даних вище, а не детерміновані іграшки та запис користувачів, тощо.
Дякуємо за будь-яку допомогу!
EDIT: Я розумію, що я повинен описати середовище, яке я використовую: Cocos2D для iPhone. Існує метод update:(ccTime)delta
. В ідеалі цей метод називатиметься кожні 1/60 секунд, але немає гарантії - delta
чи минув фактичний час з моменту останньої гри та може бути набагато більше або менше 1/60. Саме в цьому методі я хотів би зберігати поточний іграт.