Atualização do jogo XNA e empate

7

Estou confuso sobre como os métodos do jogo são chamados e quando.

Então eu li que a sequência é:

  1. Inicializar
  2. LoadContent
  3. Atualizar
  4. Desenhar
  5. UnloadContent

Onde 3 e 4 são o loop do jogo, então after Updateé chamado, Drawé chamado, então Update, então Drawe assim por diante. O loop do jogo (Atualização e Empate) é executado 60 vezes por segundo.

Então eu li em outro lugar que Updatee Drawpode ser invocado em momentos diferentes e Updatepode ser chamado mais de uma vez antes Drawe assim por diante.

... e no final UnloadContenté invocado após o Updatese o Exitmétodo for chamado.

xdevel2000
fonte
Os 60 quadros por segundo assumem que isFixedTimeStep está definido como true, que por padrão é. Você pode configurá-lo como falso se desejar obter o máximo desempenho do seu PC ou para comparações gerais.
ChrisC

Respostas:

11

Na verdade, existem duas maneiras pelas quais o XNA pode executar o loop do jogo, Etapa Fixa e Etapa Variável. Quando você configura seu jogo para executar a Etapa Fixa, ele sempre chama o método Update com base no tempo decorrido do jogo. Portanto, não importa a velocidade do seu computador, ele sempre chamará o método Update no mesmo intervalo de tempo decorrido do jogo; portanto, o Update e o Draw serão chamados sucessivamente, conforme descrito. No entanto, se o seu jogo estiver lento, o XNA começará a chamar o método Update várias vezes antes do método Draw, para "recuperar o atraso".

A Etapa variável, por outro lado, não tenta "acompanhar" ou faz várias chamadas do método Update antes da chamada do método Draw, se o jogo estiver lento.

Edição: Nice post post que explica passo fixo e passo variável é muito mais profundidade. gamedev.net

Tanoeiro
fonte
6
Eu encontrei a melhor explicação de como ele funciona (para mim) é aqui: GameTime Entendimento - Shawn Hargreaves Blog
Richard Marskell - Drackir
Obrigado, mas eu ainda não entendo se o tempo de 16 milhões. entre cada chamada é para todo o ciclo do jogo ou é para o Update e depois para o método Draw.
Xdevel2000
@ xdevel2000, o loop do jogo é apenas os métodos Update e Draw. Mas você pode chamar outros métodos nos métodos Update e Draw, os quais se tornarão parte do ciclo do jogo.
Cooper
@ Neeko, sim, mas você não responde à minha pergunta! Por favor, pergunto se 16 milhões. são para cada método ou são para todos os ciclos do jogo (atualização e empate). Obrigado.
xdevel2000 27/09/11
@ xdevel2000 Desculpe por responder mais de um ano depois, mas acabei de perceber essa pergunta! Os 16ms são para todo um ciclo de loop de jogo único. Não para todos os métodos chamados dentro desse ciclo.
Cooper
0

A menos que você esteja escrevendo um jogo para Windows e carregando conteúdo não gerenciado, não se preocupe com o UnloadContent. Se tudo o que você está fazendo é desenhar com o SpriteBatch e talvez reproduzir objetos SoundEffect e Song, esqueça o UnloadContent () por enquanto.

Para Update and Draw, ao iniciar o XNA, pense que o XNA Framework chamará automaticamente Update, depois Draw, depois Update e Draw ... e assim por diante. Existem exceções? Sim. Você precisa se preocupar com eles quando começar? Não, a menos que você já seja um desenvolvedor de jogos experiente. Se sim, aceite minhas desculpas ...

Se o seu jogo usar o Fixed Time Step, será um atraso para que esse loop não seja mais rápido que o tempo. Os projetos do Windows Phone adicionam uma linha de código para fixar o jogo em 30fps. Você aprenderá um pouco sobre isso fazendo nada além de criar um novo projeto do Windows Game e, em seguida, um novo projeto do Windows Phone Game. Procure a única linha de código no projeto do Windows Phone que corrige a etapa do tempo.

O comentário acima para ver a publicação de Shawn Hargreaves está no local. Na verdade, ele é a fonte se você quiser falar franco com desenvolvedores sobre a estrutura XNA. São alguns anos de posts, mas esse é um bom recurso.

Chris Gomez
fonte
11
Para expandir um pouco em UnloadContent, isso se aplica ao ContentManager padrão que o objeto Game fornece. Você pode criar novos ContentManagers para carregar e gerenciar conteúdo diferente em seus jogos, mas nesse caso não é necessário. O ContentManager padrão é descartado quando o Jogo sai, que descarrega automaticamente o conteúdo.
ChrisC
-2

Não sei como alterar a ordem, mas Atualizar e Desenhar são apenas funções para que você possa chamá-las de outros lugares - embora eu não consiga pensar nisso. Como regra geral, você usaria apenas Atualizar, Desenhar, Atualizar, Desenhar etc., como disse.

A descarga é chamada depois que a função de saída é chamada sim.

T. Kiley
fonte