Red de conocimiento informático - Problemas con los teléfonos móviles - [Porque no entiendo] -¿Qué es la programación de máquinas de estados (patrón de diseño) (3)

[Porque no entiendo] -¿Qué es la programación de máquinas de estados (patrón de diseño) (3)

Después de escribir el artículo anterior, he estado pensando en hacer un ejemplo de juego y aplicar el patrón de máquina de estados que aprendí antes. Sin embargo, seguí encontrando varios errores extraños (que escribí más tarde), así que nunca lo terminé. Además, volvía a ser vago, así que decidí hacer algo más sencillo y seducir a mi yo vago con un objetivo más accesible.

Basta de tonterías, pongámonos manos a la obra. Leí atentamente una publicación de blog hace unos días: Game State Machine (infracción, eliminación inmediata), y pensé que era bastante buena. Recomiendo a mis amigos que la lean detenidamente.

Después de leer el blog, parece que tengo una idea sobre el ejemplo previamente planeado y concluí (sin sentido) que se necesitan los siguientes pasos para implementar una estructura de máquina de estado de juego:

Quiero hacerlo. Un ejemplo simple de cambio de interfaz de usuario, por lo que los requisitos breves son: abra el programa para ingresar a la interfaz principal, haga clic en la interfaz principal para iniciar el juego, ingrese a la interfaz del juego, haga clic en la interfaz del juego para finalizar el juego , ingrese a la interfaz de liquidación, puede hacer clic en la interfaz de liquidación para regresar a la interfaz principal Ingrese a la interfaz principal, o haga clic en Reiniciar juego para ingresar a la interfaz del juego nuevamente.

A juzgar por la descripción del requisito, hay tres estados:

Hay cuatro eventos:

Luego (pretenciosamente) dibujé una tabla de transición de estados:

p>

Como se mencionó en un artículo anterior, en el desarrollo del juego Cocos2d-x, Scene se usa como controlador y Scene controla la aparición y desaparición de cada capa.

El código fuente de Scene se publica aquí (el archivo fuente completo, incluida la clase base de estado que aparecerá en los pasos siguientes y la clase de estado derivada):

QFLGameTwoScene.hpp

p>

QFLGameTwoScene.cpp

Como puede ver arriba, la escena incluye principalmente:

Con el contenido anterior, la escena en este ejemplo puede funcionar como una función de controlador.

La clase base de estado es muy necesaria para lograr el objetivo de que cada estado en el mismo nivel pueda realizar la transición a través del mismo controlador, cada clase de estado debe tener un proceso unificado para el cambio.

El código fuente de la clase base estatal en este ejemplo se publica aquí:

QFLGameTwoStateBase.hpp

Este archivo fuente contiene:

Todas las clases de estado derivadas incluirán este archivo e implementarán los métodos en la clase base virtual GameTwoState, por lo que todas las clases de estado tendrán un proceso de conmutación unificado:

Y cuando se completa un determinado evento, se requiere una transición de estado , la entrega de mensajes se puede completar enviando eventos personalizados. Los nombres de los eventos personalizados se colocan aquí para mayor comodidad.

Aquí se publican directamente los códigos fuente de varios estados, incluidos comentarios, así que no repetiré tonterías:

QFLGameTwoMainLayer.hpp

QFLGameTwoMainLayer.cpp

QFLGameTwoGameLayer.hpp

QFLGameTwoGameLayer.cpp

QFLGameTwoResultLayer.hpp

QFLGameTwoResultLayer.cpp

Aquí, todo Se han completado los pasos mencionados anteriormente. Este ejemplo de máquina de estado de cambio de UI está completo.

En AppDelegate.cpp, ingrese a la escena directamente:

Ingrese a la interfaz principal:

Iniciar sesión en este momento:

Haga clic en Iniciar , ingrese a la interfaz del juego:

Iniciar sesión en este momento:

->MainLayer

->GameLayer

->GameLayer

Haga clic en Arriba para ingresar a la interfaz de liquidación:

Iniciar sesión en este momento:

->GameLayer

->GameLayer

[Evento]->Game_Over

->GameLayer

->ResultLayer

->ResultLayer

Haz clic en Reproducir para volver a ingresar a la interfaz del juego:

Iniciar sesión en este momento:

->GameLayer

->GameLayer

[Evento]->Game_Over

->GameLayer

- >ResultLayer

->ResultLayer

[Evento]->Result_Replay

->ResultLayer

->GameLayer

->GameLayer

Haga clic en Arriba para ingresar a la interfaz de liquidación nuevamente, luego haga clic en Inicio en la interfaz de liquidación para regresar a la interfaz principal

Una vez completadas las dos operaciones anteriores, el registro es el siguiente:

->GameLayer

->GameLayer

[Evento]->Game_Over

->GameLayer

->ResultLayer

->ResultLayer

[Evento]- >Result_Replay

->ResultLayer

->GameLayer

lindo> ->GameLayer

[Evento]->Game_Over

->GameLayer

->ResultLayer

->ResultLayer

[Evento]->Result_Home

->ResultLayer

->MainLayer

->MainLayer

El ejemplo del uso de FSM para implementar el cambio de UI aquí es solo uno de muchos métodos, y aún no hemos comparado sus ventajas y desventajas. (Valor de experiencia +1 por usar el editor de rebajas)

Hay muchas posibilidades, si alguien ha comparado estos métodos. Por favor deja un mensaje y comparte tu experiencia.