Como posso atualizar seletivamente o XNA GameComponents?


8

Eu tenho um pequeno jogo 2D no qual estou trabalhando no XNA. Até agora, eu tenho uma nave controlada por jogadores que opera com impulso vetorial e é muito divertido girar em círculos. Implementei isso como DrawableGameComponent e o registrei no jogo usando game.Components.Add (this) no construtor Ship Object.

Como posso implementar recursos como pausar e um sistema de menus com minha implementação atual? É possível definir determinados GameComponents para não atualizar?

Isso é algo para o qual eu deveria estar usando um DrawableGameComponent? Caso contrário, quais são os usos mais apropriados para isso?

Respostas:


6

Você pode definir a propriedade Enabled no componente do jogo como false. O jogo não o atualizará. Você também pode definir a propriedade Visible como false e o jogo não solicitará que ele desenhe. Pode ficar meio bagunçado quando você tem muitos componentes do jogo. Você pode considerar usar algum gerenciamento de estado do jogo e subdividir os componentes do jogo em estados separados.

Dessa forma, os componentes do jogo que fazem parte do jogo podem ser instruídos a não desenhar / atualizar quando o estado do jogo é instruído a não atualizar ou desenhar, etc.

Este é um bom exemplo de gerenciamento de estado do jogo: Exemplo de Gerenciamento de Estado do Jogo

Então você pode ter seu PlayScreen (o estado com o jogo) e ter um PauseScreen em cima dele. O PlayScreen não seria atualizado, mas ainda assim seria desenhado. (ou algo dessa natureza)


2
Portanto, as propriedades Enabled e Visible controlam se os métodos Update () e Draw (), respectivamente, serão chamados? Se Visible for false, QUALQUER código no método Draw () será executado ou simplesmente não é chamado? Eles afetam mais alguma coisa?
Bill

3
Eles não serão chamados e afetam apenas Atualizar (Ativado) e Desenhar (Visível).
R2d2rigo

Então essa é exatamente a funcionalidade que eu estava esperando. Obrigado.
Bill
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.