Cómo crear efectivamente patrones de viñetas

8

Actualmente estoy creando un tirador de arriba hacia abajo como Touhou. El factor más importante del juego es que hay muchos patrones y formas diversas de generar y disparar balas al jugador, vea este video: http://www.youtube.com/watch?v=4Nb5Ohbt1Sg#start=0 : 60; final = 9: 53 ;

En este momento, estoy usando un "Patrón" de clase que tiene una serie de pasos para moverse y disparar. Sin embargo, creo que este método es bastante laborioso, ya que tengo que crear un nuevo Patrón para cada ataque y quizás nuevas clases Bullet que implementarán un cierto comportamiento.

Esta pregunta recibió un comentario que sugiere que debería buscar BulletML para crear y almacenar viñetas fácilmente con un patrón específico. Parece decente, pero me llevó a preguntarme, ¿qué otras soluciones tiene que debería tener en cuenta?

Actualizar

Mi diseño actual es el siguiente:

Diagrama UML

Un ejemplo de un patrón implementado:

Mi GigasPattern primero ejecuta un teletransporte que mueve a Alice a un cierto punto (X, Y) en la pantalla. Una vez completado esto, el patrón comienza a usar el Mover para mover el sprite (mientras que el teletransporte tiene efectos y animación separados). Estos no son motivo de preocupación, realmente, ya que son bastante simples.

El tirador también crea varios ataques, que son clases nuevamente que el tirador puede usar para crear varios patrones de balas, como el de la pregunta que publiqué. Una vez que el Mover ha llegado a su destino, tanto él como el tirador se detienen y regresan a un estado inactivo. El patrón se completa, es eliminado por la IA y se elige uno nuevo.

IAE
fuente

Respuestas:

4

Va a ser laborioso, pase lo que pase, crear ese nivel parece una tarea fácil, y puede que no sea tan difícil, pero siempre tomará mucho tiempo. (Una estimación muy aproximada: 1000 veces el tiempo de reproducción de algo tan genial como ese video).

Si usa un lenguaje de secuencias de comandos, todavía tiene que escribir exactamente el mismo código, solo que en un idioma diferente, la ventaja es que puede hacer niveles de secuencias de comandos sin meterse con el código compilado. Si trabajas en un gran equipo, definitivamente querrás eso, pero como desarrollador único, generalmente no hace una gran diferencia.

BulletML no es una respuesta en sí misma, necesita una implementación funcional en su idioma, que debe interactuar con el resto de su juego. Y todavía hay un gran trabajo al escribir todos esos archivos XML.

Me inclino a decir que debe seguir programando los patrones deseados en las clases como lo hace, pero quizás podría revelar algunas muestras de su estructura actual, podría haber mejoras para hacer.

Editar:
puede haber una realización que podría simplificar un poco las cosas y darle una caja de herramientas un poco mejor. Podría describir una IA como un patrón, idealmente debería haber un solo tipo de entidad, pero cualquier entidad puede elegir invocar a otra entidad del mismo tipo para hacer el trabajo. Esto lo librará de cualquier límite de cuán profundo puede anidar la propagación de responsabilidad y le dará un tipo menos de clase en la que pensar.

Al menos eso es lo que deduzco del diagrama. Si bien debe limitar la cantidad de código que incluye en una pregunta, nunca hay un sustituto completo para ver un código real.

aaaaaaaaaaaa
fuente
Claro, gracias por la ayuda. He incluido un diagrama UML simplificado de mi diseño actual, así como una aplicación de ejemplo del diseño en acción. ¡Espero que ayude!
IAE
2

Tal vez podrías implementar un lenguaje de script pequeño y propio para tu juego. Entonces podrá guiar los comportamientos de viñetas simplemente agregando nuevos guiones. La ventaja de un lenguaje de script propio es que puedes usarlo en otras partes de tu juego. O podría intentar usar Lua (no sé qué idioma / marco está utilizando). Pero en mi opinión, Lua sería una exageración si solo quieres tener patrones de movimiento.

Entre: Ya hice esto para un tirador espacial, pero por el comportamiento del enemigo. Funcionó bien, así que realmente podrías intentarlo.

M0rgenstern
fuente
Estoy usando AS y no se presta demasiado bien para usar ningún recurso local, sin embargo, usar un lenguaje de script o XML puede ser valioso para mí, así que gracias por la sugerencia.
IAE
2

Estaba en la misma situación hace un tiempo y comencé a implementar mi propia arquitectura para los patrones de viñetas. Sin embargo, me di por vencido porque me encontré con una implementación de BulletML para C # / XNA: BulletML C #

Tuve que hacer algunos cambios, pero ahora crear patrones que se vean espectaculares son realmente fáciles. Hay una gran demostración aquí que muestra cómo, unas pocas líneas de XML, puede crear patrones impresionantes.

Si está trabajando en C #, le recomiendo evitar reinventar la rueda. Especialmente si quieres tener patrones muy complejos. Puede tomar algún tiempo comprender BulletML, pero, en mi opinión, vale la pena su tiempo.

Sin embargo, si decide no usar BulletML, entonces, al menos, eche un vistazo al código C # y obtenga una idea de su arquitectura. Puede darte algunas ideas.

pek
fuente
¡Gracias! Acabo de comenzar a alejarme de ActionScript para este proyecto y ahora lo estoy escribiendo en C # / XNA. Definitivamente voy a echar un vistazo al código, gracias.
IAE