Eu tenho a função de pausa implementada e funciona corretamente, pois escurece a tela do jogador e para de atualizar a jogabilidade.
O problema é que o GameTime continua a aumentar enquanto está pausado, então meu método que verifica gameTime versus anteriorSpawnTime antes de gerar outro inimigo fica confuso e, se o jogo for pausado por muito tempo, é perceptível que o próximo inimigo desenha muito cedo.
Aqui está o meu código para a atualização do inimigo.
private void UpdateEnemies(GameTime gameTime)
{
// Spawn a new enemy every 1.5 seconds
if (gameTime.TotalGameTime - previousSpawnTime > enemySpawnTime)
{
previousSpawnTime = gameTime.TotalGameTime;
// Add an Enemy
AddEnemy();
}
...
Eu também tenho outros métodos que dependem do gameTime. Tentei obter o tempo total de pausa e subtraí-lo do tempo total do jogo, mas não consigo fazê-lo funcionar corretamente se é assim que devo resolver isso.
Se você precisar ver outro código, me avise. Obrigado.
fonte
GameTime
é calculado e gerenciado automaticamente pela estrutura; portanto, para passar um delta zero seria necessário instanciar umGameTime
objeto separado ou alterar a assinatura para usar um float; e mesmo com um delta zero, ele ainda executaria as verificações de adição e temporizador desnecessariamente. Se necessário, basta agrupar parte do método em uma verificação de pausa, para que a outra metade possa continuar atualizando.GameTime
objeto em um float simples e usar esse valor. Eu nunca tive a necessidade, mas isso facilita a implementação de câmera lenta - basta dimensionar o valor do tempo decorrido de alguma forma constante. Quanto à pausa do jogo, acho que é mais uma questão de preferência pessoal - eu gosto de tratar a pausa como um botão liga / desliga, em vez de um delta zero, para pular explicitamente os cálculos dependentes do tempo, mas ambos são soluções perfeitamente válidas :)