РЕДАКТИРОВАТЬ:
Пожалуйста, смотрите ответ @ Bluescrn на этот вопрос; он уточняет слабости в воспроизведении элементов управления, а не векторов движения или положения.
-
Вы на правильном пути. Вот подход, который я бы использовал:
Контроллеры
Создайте класс Controller, который получает ввод с клавиатуры и передает его вашему персонажу. Тем не менее, также есть запись контроллера точно, когда значимые клавиши (например, стрелки, прыжок и т. Д.) Были нажаты и когда они были отпущены. Это будет хранить такую информацию:
actions[0].milliseconds = 400 actions[0].action = right pressed
actions[1].milliseconds = 1000 actions[1].action = jump pressed
actions[2].milliseconds = 1300 actions[2].action = jump released
actions[3].milliseconds = 2500 actions[3].action = jump pressed
actions[4].milliseconds = 3000 actions[4].action = jump released
actions[5].milliseconds = 5330 actions[5].action = right released
Контроллер имеет два режима:
- Запись: получает ввод с клавиатуры. Записи ввода в список. Руки ввода символов в зависимости от состояния клавиатуры.
- Воспроизведение: Игнорирует ввод с клавиатуры. Перемещение по списку в миллисекундах с момента начала уровня. Вручную ввод символов на основе записанного состояния клавиатуры в текущий момент.
Персонажи
Когда ваш объект Character создан, он создает новый контроллер для себя. Персонаж может находиться в одном из двух режимов в любое время:
- Активный: всегда есть только один активный Персонаж, и это тот, кем вы управляете. Когда персонаж находится в активном режиме, его контроллер находится в режиме записи.По умолчанию, когда персонаж создается, он находится в активном режиме.
- Призрак: это тот, который повторяет ваши прошлые действия. Когда Персонаж входит в режим Призрака, он меняет свой внешний вид и переводит свой Контроллер в режим воспроизведения.
Уровни
Недавно начатый уровень
Когда вы начнете уровень, создайте одного персонажа. Теперь уровень начинается, и игрок делает свое дело.
Когда время сбрасывается
Когда уровень сбрасывается, сделайте три вещи:
- Скажите текущему активному персонажу, чтобы войти в режим призрака.
- Создайте нового персонажа.
- Позвоните всем персонажам, чтобы сбросить себя. Это вернет их в исходное положение без движения и т. Д. Они, в свою очередь, сообщат своим контроллерам обнулить миллисекунду 0 без нажатия клавиш.
Затем начинается уровень, и игрок делает свое дело.