¿Cómo puedo actualizar selectivamente XNA GameComponents?


8

Tengo un pequeño juego 2D en el que estoy trabajando en XNA. Hasta ahora, tengo un barco controlado por el jugador que opera con empuje vectorial y es terriblemente divertido girar en círculos. Implementé esto como DrawableGameComponent y lo registré con el juego usando game.Components.Add (this) en el constructor de objetos Ship.

¿Cómo puedo implementar características como la pausa y un sistema de menús con mi implementación actual? ¿Es posible configurar ciertos GameComponents para que no se actualicen?

¿Es esto algo para lo que incluso debería estar usando un DrawableGameComponent? Si no, ¿cuáles son los usos más apropiados para esto?

Respuestas:


6

Puede establecer la propiedad Enabled en el componente del juego en false. El juego no lo actualizará. También puede establecer la propiedad Visible en falso y el juego no le dirá que dibuje. Puede ser un poco complicado cuando tienes muchos componentes del juego. Es posible que desee considerar el uso de una gestión de estado del juego y subdividir los componentes del juego en estados separados.

De esta forma, se puede decir a los componentes del juego que son parte del juego que no dibujen / actualicen cuando se les dice al estado del juego que no se actualicen o dibujen, etc.

Este es un buen ejemplo de gestión del estado del juego: Muestra de gestión del estado del juego

Entonces, podría tener su PlayScreen (el estado con el juego en juego) y hacer que PauseScreen aparezca encima. PlayScreen no se actualizaría, pero aún así se dibujaría. (O algo por el estilo)


2
Entonces, ¿las propiedades Enabled y Visible controlan si se llamará o no a los métodos Update () y Draw (), respectivamente? Si Visible es falso, ¿CUALQUIER código en el método Draw () se ejecutará o simplemente no se llama? ¿Afectan algo más?
Bill

3
No se llamarán, y solo afectan a Actualizar (Habilitado) y Dibujar (Visible).
r2d2rigo

Entonces esta es exactamente la funcionalidad que esperaba. Gracias.
Bill
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.