EDITAR:
Por favor, veja a resposta de @ Bluescrn a esta pergunta; ele elabora pontos fracos na repetição de controles, em vez de vetores ou posições de movimento.
-
Você está no caminho certo. Aqui está a abordagem que eu usaria:
Controladores
Crie uma classe Controller que receba a entrada do teclado e a transmita ao seu personagem. No entanto, também tenha um registro do controlador exatamente quando as teclas importantes (por exemplo, setas, salto, etc.) foram pressionadas e quando foram liberadas. Armazenaria esse tipo de informação:
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
Um controlador possui dois modos:
- Registro: recebe entrada do teclado. Registra a entrada na lista. Entrega a entrada de caracteres com base no estado do teclado.
- Replay: ignora a entrada do teclado. Avanços na lista de acordo com milissegundos decorridos desde o início do nível. Entrega a entrada de caracteres com base no estado do teclado gravado no momento atual.
Personagens
Quando seu objeto Personagem é construído, ele cria um novo Controlador para si. O personagem pode estar em um dos dois modos a qualquer momento:
- Ativo: existe apenas um personagem ativo e esse é o que você controla. Quando o personagem está no modo ativo, seu controlador está no modo de gravação. Por padrão, quando um personagem é construído, ele está no modo Ativo.
- Fantasma: é esse que repete suas ações passadas. Quando um personagem entra no modo Ghost, ele muda sua aparência e define seu Controller no modo Replay.
Níveis
Um nível recém-iniciado
Quando você inicia o nível, crie um único personagem. Agora o nível começa e o jogador faz o que quer.
Quando o tempo é redefinido
Quando o nível for redefinido, faça três coisas:
- Diga ao personagem ativo atual para entrar no modo Ghost.
- Crie um novo personagem.
- Chame todos os caracteres para redefinir a si mesmos. Isso os colocará de volta na posição inicial sem movimento, etc. Eles, por sua vez, instruirão seus controladores a redefinir para milissegundos 0 sem nenhuma tecla pressionada.
Então o nível começa e o jogador faz o que quer.