Estou criando um iphone shmup e tentando decidir que tipo de loop de jogo usar. Desejo usar timestep semi-fixo ou timestep totalmente fixo.
Com o timestep semi-fixo, farei zero ou mais chamadas de atualização (FIXED_INTERVAL) seguidas por uma chamada de atualização (dt) em que dt <= FIXED_INTERVAL por loop do jogo. Pelo que entendi, as desvantagens desse método são que minha lógica de atualização física (dt) será mais difícil de programar, porque basicamente preciso assumir uma variável dt para cada atualização. E também ouvi dizer que cada execução do meu jogo será um pouco diferente devido aos valores de ponto flutuante não serem os mesmos todas as vezes.
Então, com timestep totalmente fixo, estou fazendo zero ou mais chamadas de atualização (FIXED_INTERVAL) seguidas de uma chamada de interpolação (dt / FIXED_INTERVAL) em que dt <FIXED_INTERVAL por loop do jogo.
Então parece que a grande decisão que realmente tenho que tomar é: quero enfrentar o desafio de implementar uma atualização (dt) com uma variável dt ou quero enfrentar o desafio de implementar a interpolação?
Agora, pelo que li, a maioria das pessoas está dizendo para usar totalmente fixo e fazer a interpolação. Mas quando penso em implementar a interpolação, parece que eu seria muito mais complexo do que uma atualização (dt) com a variável dt. Isso ocorre porque, se eu usar a interpolação, tenho que lembrar o estado anterior e o atual. Então, se eu quiser usar a interpolação, tenho que criar uma camada adicional de indireção que abstraia estados individuais inteiros do jogo. Enquanto no timestep semi-fixo, onde não preciso usar a interpolação, não preciso criar uma abstração do estado do jogo, porque sempre há apenas um estado do jogo e são simplesmente as "matrizes globais" que representam meus inimigos e inimigos. balas etc.
Então, qual é a opção mais prática: eu o implemento semifixo, sabendo que minhas atualizações de física podem ficar complicadas com a variável dt. Ou eu uso totalmente fixo e tento criar uma abstração de estado do jogo para poder acompanhar o estado anterior e o estado atual para executar a interpolação?