Projet en phase de démarrage tentant de porter le jeu Flash Incredibots 2 CE à TypeScript et Pixi.js.
Les instructions d'environnement de développement dans ce qui suit ne s'applique pas à la version HTML5.
Merci d'avoir téléchargé Incredibots! Préparez-vous à construire, contrôler et partager vos propres créations de robots dans un terrain de jeu basé sur la physique!
Pour exécuter Incredibots ou Incredibots2, ouvrez simplement le fichier Incredibots.html ou Incredibots2.html dans un navigateur Web avec Flash Player installé.
Apprécier!
Le code source des clients du jeu IB1 et IB2 est situé dans les sous-répertoires SRC / Incredibots et SRC / Incredibots2. Ouvrez l'IDE ActionScript de votre choix (j'ai utilisé Flex Builder 3) et créez un nouveau projet en utilisant le répertoire approprié. Le fichier d'application exécutable principal doit être défini sur main.as, et j'ai utilisé le taux de taux de param-default-trame 30 comme argument de compilateur. Assurez-vous également de créer un lien vers la bibliothèque FLGUI.SWC dans le dossier LIBS. Le code source contient quelques instructions [intégrées], qui, je crois, ne peuvent fonctionner qu'avec Flex Builder, mais d'autres IDE ont probablement des méthodes similaires de liaison aux actifs.
Une fois que tout est configuré et que le projet se compile correctement, l'IDE doit créer un dossier bin-debug (ou quelque chose de similaire), contenant le SWF et un fichier HTML qui incorpore le SWF. Maintenant, vous pourrez apporter des modifications au code et les voir reflétées dans le SWF construit!
Je vais donner un aperçu de base des classes clés du code côté client, dans l'espoir de comprendre comment tout fonctionne exactement. La classe d'application principale est principale. Aussi, ce qui s'occupe d'ajouter des auditeurs d'événements à la scène et de déterminer quelle classe «contrôleur» est active. Vous pouvez considérer un contrôleur comme représentant vaguement un type de «écran». Il y en a un pour le menu principal, puis un pour l'écran de jeu principal, avec des sous-classes pour tous les différents types d'écrans de jeu principaux (c'est-à-dire 1 sous-classe par tutoriel, 1 pour le mode sandbox, 1 pour le mode Créer un défi, etc.). La classe (malheureusement quelque peu monolithique) qui gère la plupart des principales fonctionnalités d'édition de robot est Controlgame, qui propose des méthodes pour répondre à tous les boutons et options de menu disponibles lors de l'édition d'un robot, ainsi que des méthodes pour gérer la création, la suppression, la sélection, le déplacement et l'édition de pièces de robot. Le tableau AllParts dans Controlgame représente le robot en cours de travail, comme une gamme de pièces. Il gère également le démarrage et l'arrêt de la simulation Box2D
Le package de pièces contient des définitions de classe pour chaque type de partie disponible lors de la construction d'un robot. IE Circle, rectangle, articulation fixe, articulation rotative, propulseurs, etc. Chaque instance de ces classes contient toutes les données sur cette partie particulière, par exemple, un revoltejoint a des variables membres pour la force des articulations, la vitesse, que le moteur soit activé ou non, des clés, qui peuvent être considérées (IE Paramètres de bac à sable, restrictions de défi).
Le package d'actions contient simplement une liste d'actions qui peuvent être effectuées par l'utilisateur en mode modification. Ces actions sont utilisées uniquement par les fonctionnalités «annuler» et «refaire», et chaque action sait ce qui doit être fait pour le annuler ou le refaire.
La classe d'entrée gère toutes les interactions du clavier et de la souris avec les éléments non GUI et dépasse les appels vers les méthodes appropriées (généralement dans Controlgame) pour répondre à un clic de souris donné ou une appuye sur la touche.
La classe Draw traite du dessin des robots à l'écran. Il y a 2 cas dont il doit traiter: Mode d'édition et mode de simulation. En mode édition, il dessine toutes les formes à l'écran en fonction du tableau actuel de pièces. En mode SIM, il dessine les formes en fonction du positionnement de la représentation Box2D de ces pièces, mais elle doit les rendre la même chose dans les deux cas. En théorie, cette classe est assez modulaire et devrait pouvoir être échangée avec une classe alternative utilisée pour dessiner à l'écran assez facilement, dans le cas où vous souhaitez rédiger vos propres méthodes pour traiter les graphiques robots.
Le package GUI propose un tas de classes qui construisent les différents panneaux et fenêtres de l'interface graphique tout au long du jeu. Le plus important d'entre eux est probablement la classe Saveloadwindow, qui gère l'affichage d'une liste de robots disponibles pour le chargement du serveur. Il gère également les scores élevés, la sauvegarde et le chargement des robots, les rediffusions et les défis, et la recherche de robots et autres. Il est actuellement désactivé, car les serveurs baissent, mais si un autre serveur monte, cette classe devra être modifiée. Les autres classes de ce package incluent Guiwindow, qui est la classe de base pour toutes les petites boîtes de dialogue contextuelles tout au long du jeu, et des composants tels que Fitudington, Guitextarea, etc.
Enfin, la classe de base de données gère toutes les interactions avec le serveur. Il a des opérations pour enregistrer et charger des robots et des rediffusions, ainsi que pour obtenir des listes de chacun de ces éléments, et pour vous connecter, créer un nouvel utilisateur, télécharger / télécharger des scores, et quelques autres. Chaque opération a une fonction de rappel correspondante, qui traite le résultat renvoyé par le serveur et renvoie les données à la classe appropriée pour l'affichage. Il convient de noter que les fonctions putxintoByteArray et ExtractXFrombyTearray, où X est celle de «robot», de «relecture» ou de «défi». Ces fonctions sont utilisées pour lire et écrire des données dans le jeu vers ou depuis un bytearray flash. Le robot, la relecture ou le défi sont ensuite envoyés au serveur en tant que partie de données de la partie d'une UrlRequest. Ces fonctions sont également utilisées par les fonctionnalités «import» et «export», comme un moyen facile de convertir entre les objets en jeu et le texte. Si vous souhaitez ajouter des fonctionnalités qui doivent être enregistrées avec un robot, une rediffusion ou un défi, vous devrez probablement les mettre explicitement à l'une de ces fonctions.
Le code du serveur est tout ce qui est contenu dans le sous-dossier HTDOCS. Il est entièrement écrit en PHP. Je vais d'abord parler du code du serveur de base de données.
Le code de la base de données se trouve dans le ./src/htdocs/incredibots fichier ou 2] / base de données / répertoire. Incredibots a été construit en utilisant Amazon S3 et SimpledB en tant que backends. Vous pouvez en savoir plus à ce sujet sur http://aws.amazon.com. La majeure partie du code du serveur DB est écrite spécifiquement dans cette optique, et malheureusement, je n'ai jamais réussi à le refactorisation de telle sorte que la couche de base de données soit résumée dans un package commun. Ainsi, cela peut être beaucoup de travail pour passer à quelque chose comme MySQL, bien que cela fonctionnerait aussi bien que SimpledB et S3 s'il était correctement entretenu.
Notez que Incredibots utilise également MySQL via la base de données Forums PHPBB. Parce que nous avions une seule connexion pour le jeu et les forums, tous les comptes d'utilisateurs sont gérés via la table PHPBB_USERS des forums. C'est pourquoi le code des forums PHPBB est inclus dans le package, j'ai dû apporter quelques modifications au code des forums pour faire fonctionner la connexion unique, ainsi que quelques autres fonctionnalités, telles que la possibilité d'incorporer des robots dans les articles du forum. Cela dit, la connexion de base et la création de nouveaux comptes devraient très bien fonctionner avec toute version de la fonctionnalité de PHPBB, et il ne devrait pas être trop difficile de modifier la fonctionnalité de connexion pour fonctionner avec la base de données / système que vous souhaitez.
Le code de base de données actuel doit fonctionner très bien hors de la boîte avec n'importe quel compte Amazon AWS. Les seules choses qui devraient nécessiter de modifier sont les informations d'identification dans le fichier Common_Variables.php. En dehors de cela, chaque fichier GGSCORES _ *. PHP correspond à l'une des 20 opérations DB que le client peut appeler. Tous les appels sont initialement dirigés vers GGSCORES.PHP, qui inclut le fichier approprié correspondant au paramètre «OP». Chaque opération parle ensuite à la base de données Amazon (ou à la table PHPBB_USERS dans MySQL) et fait écho une réponse pour le client. Les données binaires de tous les robots, rediffusions et défis sont envoyées au serveur via des données HTTP Post, et sont enregistrées dans S3 sous forme de blobs, avec une petite quantité de métadonnées pour chaque stockage dans SimpledB.
Remarque: Une chose que ce soit une bonne idée d'ajouter est une validation de somme de contrôle MD5 lors de l'envoi des données binaires du client vers le serveur, pour se prémunir contre la corruption des paquets. Je sais que cela s'est produit à quelques reprises dans le passé, et quand c'est le cas, le robot / relecture / défi affecté devient corrompu, et est perdu pour toujours ... (Dun Dun Dun!)
Le reste du code du serveur contient principalement des composants du site Incredibots. La page index.php contient du code pour intégrer le SWF et l'afficher correctement. Afin d'héberger un SWF, vous téléchargeriez simplement le fichier SWF qui résulte de la création du client, nommé INCRETIBOTS.SWF (ou Incredibots2.swf) au même répertoire que Index.php. La page Users.php est également là, qui affiche tous les robots, rediffusions et défis téléchargés par un utilisateur donné dans une page Web (quelque peu) bien formatée.
Incredibots a été initialement conçu par Ryan Clark, programmé par Oliver Trujillo, avec l'art de Matt Parry. Une grande quantité de crédit devrait également aller à Erin Catto et au moteur de physique Box2D, ainsi que le port flash de celui-ci sur lequel notre jeu est construit. http://www.box2d.org/ http://box2dflash.sourceforge.net/
Incredibots est probablement le jeu sur lequel j'ai eu le plus de plaisir à travailler. Ce fut une explosion de vérifier toutes les créations folles créées par la communauté Incredibots, et je vous souhaite tout le meilleur pour garder Incredibots en cours. Bravo et bonne construction de bots!
- Oliver