Estou trabalhando em um jogo de corrida de carros e acabei de implementar um sprite fantasma para repetir corridas passadas. Uso um mecanismo de física e, depois de muita leitura, cheguei à conclusão de que a melhor maneira de armazenar os dados fantasmas para reprodução seria registrar a posição e a rotação do carro em determinados momentos, como por exemplo descrito aqui: https: // gamedev. stackexchange.com/a/8380/26261 .
Mas qual seria uma boa maneira de encontrar esses pontos no tempo durante a reprodução? Um exemplo seria um registro com esses dados:
time: +3.19932 (seconds since race start)
position: 180,40 (position at that time)
rotation: 30.4 (rotation at that time)
Mas eu tenho vários problemas com isso:
Quando reproduzo, é improvável que eu atinja novamente o ponto no tempo exato em 3.19932 - mais provavelmente, terei um ponto no tempo em torno de 3.1 e precisarei encontrar o registro de correspondência mais próximo. Ao interpolar, até a correspondência mais próxima acima e abaixo. Isso parece muito ineficiente e demorado?
Em qual estrutura de lista eu poderia armazenar esses registros para uma reprodução posterior? Uma matriz? Isso não significa que o tempo de busca por registros correspondentes a um determinado tempo aumentará quanto mais tempo a corrida?
Qual frequência devo usar para pontos no tempo? Cada quadro seria um exagero - acho que eu deveria salvar, ou seja, cada enésimo quadro e interpolar entre eles, o que dificulta ainda mais as questões de armazenamento.
Então, essa idéia é a abordagem correta? Se sim, como eu poderia armazenar e recuperar os dados com eficiência? Observe que geralmente eu gostaria de usar a estrutura de dados acima, não os estados de jogos determinísticos e a gravação de entrada do usuário etc.
Obrigado por qualquer ajuda!
Edição: Eu sei que devo descrever o ambiente que eu uso: Cocos2D para iPhone. Existe um método update:(ccTime)delta
. Idealmente, esse método seria chamado a cada 1/60 segundos, mas não há garantia - delta
é o tempo real passado desde o último clique no jogo e pode ser muito mais ou menos que 1/60. É nesse método que eu gostaria de armazenar o estado atual do jogo.