He estado trabajando en algunos proyectos de pasatiempos en los últimos 3-4 años. Solo juegos simples en 2d y 3d. Pero últimamente he comenzado un proyecto más grande. Así que en los últimos meses he estado tratando de diseñar una clase de objeto de juego que pueda ser la base de todos mis objetos de juego. Entonces, después de muchas pruebas de probar y morir, recurrí a Google, que rápidamente me señaló algunos PDF y PowerPoints de GDC. Y ahora estoy tratando de entender los objetos de juego basados en componentes.
Entiendo que el motor crea un objeto de juego y luego une diferentes componentes que manejan cosas como la salud, la física, las redes y lo que sea que hagas que hagan. Pero lo que no entiendo es cómo el componente X sabe si Y ha cambiado el estado del objeto. ¿Cómo sabe el componente de física si el jugador está vivo, porque la salud está controlada por el componente de salud? ¿Y cómo juega HealthComponent la "animación de jugador muerto"?
Tenía la impresión de que era algo así (en el componente de salud):
if(Health < 0) {
AnimationComponent.PlayAnimation("played-died-animation")
}
Pero, de nuevo, ¿cómo sabe HealthComponent que el objeto del juego al que está conectado tiene un AnimationComponent adjunto? La única solución que veo aquí es
Verifique si hay un AnimationComponent adjunto o no (ya sea dentro del código del componente o en el lado del motor)
Tener componentes requiere otros componentes, pero eso parece luchar contra todo el diseño de componentes.
Escriba como, HealthWithAnimationComponent, HealthNoAnimationComponent, y así sucesivamente, lo que nuevamente parece luchar contra toda la idea del diseño de componentes.