Proyecto de etapa temprana que intenta portar el juego Flash Incredibots 2 CE a TypeScript y Pixi.js.
Las instrucciones del entorno de desarrollo en lo que sigue no se aplican a la versión HTML5.
¡Gracias por descargar Incredibots! ¡Prepárate para construir, controlar y comparte tus propias creaciones de robots en un patio de recreo basado en la física!
Para ejecutar Incredibots o Incredibots2, simplemente abra el archivo Incredibots.html o Incredibots2.html en un navegador web con Flash Player instalado.
¡Disfrutar!
El código fuente para los clientes del juego IB1 e IB2 se encuentra en los subdirectorios SRC/Incredibots y SRC/Incredibots2. Abra el IDE de ActionScript de su elección (utilicé Flex Builder 3) y cree un nuevo proyecto utilizando el directorio apropiado. El archivo de aplicación ejecutable principal debe establecerse en main.as, y utilicé el param -fault-frame-thel 30 como argumento del compilador. También asegúrese de vincular a la biblioteca FLGUI.SWC en la carpeta Libs. El código fuente contiene algunas declaraciones [de incrustación], que creo que solo pueden funcionar con Flex Builder, pero otras IDE probablemente tienen métodos similares de vinculación con los activos.
Una vez que todo está configurado y el proyecto se compila correctamente, el IDE debe crear una carpeta de bin-debug (o algo similar), que contiene el SWF y un archivo HTML que incrusta el SWF. ¡Ahora podrá realizar cambios en el código y verlos reflejados en el SWF construido!
Daré una descripción básica de las clases clave en el código del lado del cliente, con la esperanza de dejar en claro cómo funciona exactamente todo. La clase de aplicación principal es Main.As, que se encarga de agregar oyentes de eventos a la etapa y determinar qué clase de "controlador" está activa. Puede pensar que un controlador representa libremente un tipo de 'pantalla'. Hay uno para el menú principal, y luego uno para la pantalla del juego principal, con subclases para todos los diferentes tipos de pantallas de juegos principales (es decir, 1 subclase por tutorial, 1 para el modo Sandbox, 1 para crear el modo de desafío, etc.). La clase (desafortunadamente algo monolítica) que maneja la mayor parte de la funcionalidad de edición de robot principal es ControllerGame, que tiene métodos para responder a todos los botones y opciones de menú disponibles mientras edita un robot, así como métodos para manejar la creación, eliminación, selección, movimiento y edición de piezas de robots. La matriz AllParts en ControlyGame representa el robot en el que se está trabajando actualmente, como una variedad de piezas. También maneja el inicio y la detención de la simulación Box2D
El paquete de piezas contiene definiciones de clase para cada tipo de 'parte disponible al construir un robot. es decir, círculo, rectángulo, articulación fija, junta giratoria, propulsores, etc. Cada instancia de estas clases contiene todos los datos sobre esa parte en particular, por ejemplo, un revoluciones revueltas tiene variables de miembros para la resistencia de la articulación, la velocidad, ya sea que el motor esté habilitado, se habilita las claves de control, a las cuales 2 partes de forma adjunta, etc. en el código, un 'robot' o un 'desafío' puede ser considerado solo de un bits de un bits con un bit de metad (en el código en el código, en el código, en el código, en un bits, es decir, un bits de una bits con un bit de metad (en el código, en el código, en el código, en un bits, es decir, un bits de un bits con metad (en el código, en el código, en el código, en el código, en el que se puede pensar en un bits de una bis (es decir, un bits con metad (en el código. Configuración de sandbox, restricciones de desafío).
El paquete de acciones simplemente contiene una lista de acciones que el usuario puede realizar cuando está en modo de edición. Estas acciones se usan únicamente por las características de 'deshacer' y 'rehacer', y cada acción sabe lo que debe hacerse para deshacerla o rehacerlo.
La clase de entrada maneja todas las interacciones de teclado y mouse con elementos no GUI, y envía llamadas a los métodos apropiados (generalmente en ControleGame) para responder a un clic o tecla de teclado determinado.
La clase de dibujo trata con el dibujo de robots a la pantalla. Hay 2 casos con los que debe tratar: modo de edición y modo de simulación. Cuando está en modo de edición, extrae todas las formas a la pantalla en función de la matriz actual de piezas. Cuando está en modo SIM, dibuja las formas en función del posicionamiento de la representación Box2D de esas partes, pero necesita hacer que se vean lo mismo en ambos casos. En teoría, esta clase es bastante modular y debería poder intercambiar con una clase alternativa utilizada para dibujar en la pantalla con bastante facilidad, en caso de que desee escribir sus propios métodos para tratar con gráficos de robots.
El paquete GUI tiene un montón de clases que construyen los diversos paneles de GUI y ventanas a lo largo del juego. El más importante de estos es probablemente la clase SaveloadWindow, que maneja la muestra de una lista de robots disponibles para la carga del servidor. También maneja puntajes altos, guardando y cargando robots, repeticiones y desafíos, y la búsqueda de robots y demás. Actualmente está deshabilitado, ya que los servidores están bajando, pero si otro servidor aumenta, esta clase tendrá que ser modificada. Otras clases en este paquete incluyen Guiwindow, que es la clase base para todos los pequeños diálogos emergentes en todo el juego, y componentes como Guibutton, Guitextarea, etc.
Finalmente, la clase de base de datos maneja todas las interacciones con el servidor. Tiene operaciones para guardar y cargar robots y repeticiones, así como para obtener listas de cada uno de estos, y para iniciar sesión, crear un nuevo usuario, puntajes de carga/descarga y algunos más. Cada operación tiene una función de devolución de llamada correspondiente, que procesa el resultado devuelto por el servidor y devuelve los datos a la clase apropiada para la visualización. Es de destacar las funciones PutxIntobyTearray y ExtractXFrombyTearray, donde X es una de 'robot', 'reproducir' o 'desafío'. Estas funciones se utilizan para leer y escribir datos en el juego hacia o desde un flash bytearray. El robot, la repetición o el desafío se envían al servidor como la parte de datos posteriores a una URLREQUEST. Estas funciones también son utilizadas por las características de 'importación' y 'exportar', como una forma fácil de convertir entre objetos en el juego y texto. Si desea agregar características que necesiten ser guardadas junto con un robot, repetición o desafío, lo más probable es que necesite ponerlas en una de estas funciones explícitamente.
El código del servidor es todo contenido dentro de la subcarpeta HTDOCS. Está escrito completamente en PHP. Hablaré primero sobre el código del servidor de la base de datos.
El código de la base de datos está en el ./src/htdocs/incredibots§ o 2]/Database/Directory. Incredibots se construyó usando Amazon S3 y SimpledB como backends. Puede leer más sobre esto en http://aws.amazon.com. La mayor parte del código del servidor DB está escrito específicamente con esto en mente, y desafortunadamente nunca pude refactorizarlo de manera que la capa de base de datos se abstraga dentro de un paquete común. Por lo tanto, puede ser mucho trabajo cambiar a algo como MySQL, aunque funcionaría tan bien como SimpleDB y S3 si se mantiene adecuadamente.
Tenga en cuenta que Incredibots también utiliza MySQL a través de la base de datos de foros PHPBB. Debido a que tuvimos un solo inicio de sesión tanto para el juego como para los foros, todas las cuentas de los usuarios se administran a través de la tabla PhPBB_USers de los foros. Esta es la razón por la cual el código de foros PHPBB está incluido en el paquete, tuve que hacer algunas modificaciones en el código de foros para que funcione el inicio de sesión único, así como algunas otras características, como la capacidad de incrustar robots dentro de las publicaciones de los foros. Dicho esto, el inicio de sesión básico y la creación de nuevas cuentas deberían funcionar bien con cualquier versión de PHPBB en ejecución, y no debería ser demasiado difícil cambiar la funcionalidad de inicio de sesión para funcionar con cualquier base de datos/sistema que desee.
El código de base de datos actual debería funcionar bien fuera de la caja con cualquier cuenta de Amazon AWS. Las únicas cosas que deberían necesitar modificar son las credenciales en el archivo común_variables.php. Además de eso, cada archivo GGScores _*. Php corresponde a una de las aproximadamente 20 operaciones de DB que el cliente puede llamar. Todas las llamadas se dirigen inicialmente a ggscores.php, que incluye el archivo adecuado correspondiente al parámetro 'OP'. Luego, cada operación habla con la base de datos de Amazon (o la tabla PhPBB_USers en MySQL) y resulta una respuesta para el cliente. Los datos binarios para todos los robots, repeticiones y desafíos se envían al servidor a través de datos de publicación HTTP, y se guardan en S3 como blobs, con una pequeña cantidad de metadatos para cada almacenado en SimpledB.
Nota: Una cosa que puede ser una buena idea agregar es una validación de suma de verificación MD5 al enviar los datos binarios del cliente al servidor, para protegerse contra la corrupción de los paquetes. Sé que esto ha sucedido en el pasado varias veces, y cuando lo hace, el robot/reproducción/desafío afectado se corrompe y se pierde para siempre ... (¡Dun Dun!)
El resto del código del servidor contiene principalmente componentes del sitio web de Incredibots. La página index.php contiene código para incrustar el SWF y mostrarlo correctamente. Para alojar un SWF, simplemente cargaría el archivo SWF que resulta de construir el cliente, llamado Incredibots.SWF (o Incredibots2.SWF) al mismo directorio que index.php. La página Ussers.php también está aquí, que muestra todos los robots, repeticiones y desafíos cargados por un usuario dado en una (algo) web bien formateada.
Incredibots fue diseñado originalmente por Ryan Clark, programado por Oliver Trujillo, con arte de Matt Parry. Una gran cantidad de crédito también debe ir a Erin Catto y al motor de física Box2d, así como al puerto de flash sobre el cual se construye nuestro juego. http://www.box2d.org/ http://box2dflash.sourceforge.net/
Incredibots es probablemente el juego en el que me he divertido más trabajando. Ha sido una explosión revisando todas las creaciones locas realizadas por la comunidad de Incredibots, y les deseo todo lo mejor para mantener a Incredibots. ¡Salud y feliz edificio de bot!
- Oliver