Frühstadienprojekt versucht, das Flash-Spiel IncrediBots 2 CE in Typscript und pixi.js.
Anweisungen für Entwicklungsumgebungen in dem folgenden, was nicht für die HTML5 -Version gelten.
Vielen Dank, dass Sie IncrediBots heruntergeladen haben! Machen Sie sich bereit, Ihre eigenen Roboter-Kreationen auf einem physikbasierten Spielplatz zu bauen, zu kontrollieren und Ihre eigenen Roboter-Kreationen zu teilen!
Um IncrediBots oder IncrediBots2 auszuführen, öffnen Sie einfach die Datei IncrediBots.html oder IncrediBots2.html in einem Webbrowser mit installiertem Flash -Player.
Genießen!
Der Quellcode für die IB1- und IB2 -Spielkunden befindet sich in den Subditionorien SRC/IncrediBots und SRC/IncrediBots2. Öffnen Sie die ActionScript -IDE Ihrer Wahl (ich habe Flex Builder 3 verwendet) und erstellen Sie ein neues Projekt mit dem entsprechenden Verzeichnis. Die Hauptantriebsdatei für Runnable sollte auf main.as gesetzt werden, und ich habe die Param-Default-Frame-Rate 30 als Compiler-Argument verwendet. Stellen Sie außerdem sicher, dass Sie in der Bibliothek von Flui.swc im Ordner LIBS verlinken. Der Quellcode enthält einige [Einbett] -Anweisungen, von denen ich glaube, dass sie möglicherweise nur mit Flex Builder zusammenarbeiten, aber andere IDEs haben wahrscheinlich ähnliche Methoden zur Verknüpfung mit Vermögenswerten.
Sobald alles eingerichtet ist und das Projekt ordnungsgemäß kompiliert, sollte die IDE einen Bin-Debug-Ordner (oder ähnliches) erstellen, der die SWF und eine HTML-Datei enthält, die den SWF einbettet. Jetzt können Sie Änderungen am Code vornehmen und sehen, wie sie sich im gebauten SWF widerspiegeln!
Ich werde einen grundlegenden Überblick über die Schlüsselklassen im Client -Seitencode geben, um klar zu machen, wie genau alles funktioniert. Die Hauptanwendungsklasse ist main.as, die sich um das Hinzufügen von Ereignishörern in die Bühne kümmert und feststellt, welche "Controller" -Klasse aktiv ist. Sie können sich einen Controller als locker vorstellen, der eine Art von "Bildschirm" darstellt. Es gibt eine für das Hauptmenü und dann einen für den Hauptspielbildschirm mit Unterklassen für alle verschiedenen Arten von Hauptspielbildschirmen (dh 1 Unterklasse pro Tutorial, 1 für den Sandbox -Modus, 1 für den Herausforderungsmodus usw.). Die (leider etwas monolithische) Klasse, die den größten Teil der Hauptbearbeitungsfunktionalität des Roboters übernimmt, ist ControllerGame, das Methoden zur Reaktion auf alle Schaltflächen und Menüoptionen enthält, die beim Bearbeiten eines Roboters sowie auf Methoden zum Erstellen, Löschen, Auswahl, Verschieben und Bearbeiten von Robot -Teilen verfügbar sind. Das AllParts -Array im ControllerGame stellt den derzeit bearbeiteten Roboter als ein Array von Teilen dar. Es wird auch mit dem Start und Stoppen der Box2D -Simulation behandelt und gestoppt
Das Teilepaket enthält Klassendefinitionen für jeden Typ von 'Teil, der beim Erstellen eines Roboters verfügbar ist. IE Kreis, Rechteck, festes Gelenk, rotierende Gelenk, Triebwerke usw. In jeder Instanz dieser Klassen enthält alle Daten über diesen bestimmten Teil, beispielsweise ein Revolutejoint -Variablen für die Gelenkfestigkeit, die Geschwindigkeit, ob der Motor aktiviert ist oder nicht, und Kontrollschlüssel 2 Formteile, an die es beigefügt ist. (dh Sandbox -Einstellungen, Herausforderungsbeschränkungen).
Das Aktionspaket enthält lediglich eine Liste von Aktionen, die vom Benutzer im Bearbeitungsmodus ausgeführt werden können. Diese Aktionen werden ausschließlich von den Merkmalen "Rückgänger" und "Wiederherstellung" angewendet, und jede Aktion weiß, was getan werden muss, um sie rückgängig zu machen oder zu wiederholen.
Die Eingangsklasse übernimmt alle Wechselwirkungen mit Tastaturen und Maus mit Nicht-GUI-Elementen und sendet Aufrufe an die entsprechenden Methoden (normalerweise im Controllername), um auf einen bestimmten Klick- oder Tastendruck zu reagieren.
Die Draw -Klasse befasst sich mit der Zeichnung von Robotern auf den Bildschirm. Es gibt 2 Fälle, mit denen es umgehen muss: Bearbeitungsmodus und Simulationsmodus. Im Bearbeitungsmodus zeichnet es alle Formen auf dem Bildschirm basierend auf dem aktuellen Array von Teilen. Im SIM -Modus zeichnet es die Formen basierend auf der Positionierung der Box2D -Darstellung dieser Teile, muss sie jedoch in beiden Fällen gleich aussehen lassen. Theoretisch ist diese Klasse ziemlich modular und sollte in der Lage sein, mit einer alternativen Klasse ausgetauscht zu werden, die zum Zeichnen auf dem Bildschirm ziemlich einfach verwendet werden kann, falls Sie Ihre eigenen Methoden zum Umgang mit Robotergrafiken schreiben möchten.
Das GUI -Paket enthält eine Reihe von Klassen, in denen die verschiedenen GUI -Panels und -fenster während des gesamten Spiels erstellt werden. Das wichtigste von diesen ist wahrscheinlich die SaveloadWindow -Klasse, in der eine Liste der für die Lade geladenen Roboter vom Server angezeigt wird. Es behandelt auch hohe Punktzahlen, Speichern und Laden von Robotern, Wiederholungen und Herausforderungen sowie die Suche nach Robotern und dergleichen. Es ist derzeit deaktiviert, da die Server ausgehen, aber wenn ein anderer Server jemals steigt, muss diese Klasse geändert werden. Weitere Klassen in diesem Paket sind GuiWindow, der Basisklasse für alle kleinen Popup -Dialoge im gesamten Spiel sowie Komponenten wie Guibutton, Guitextarea usw.
Schließlich übernimmt die Datenbankklasse alle Interaktionen mit dem Server. Es verfügt über Operationen zum Speichern und Laden von Robotern und Wiederholungen sowie zum Abrufen von Listen von diesen sowie zum Anmelden, zum Erstellen eines neuen Benutzers, zum Hochladen/Herunterladen von Bewerten und einigen weiteren. Jede Operation verfügt über eine entsprechende Rückruffunktion, die das vom Server zurückgegebene Ergebnis verarbeitet und die Daten an die entsprechende Klasse zur Anzeige zurückgibt. Bemerkenswert sind die Funktionen Putxintobytearray und ExtractxfromBytearray, wobei X einer von "Roboter", "Wiederholung" oder "Herausforderung" ist. Diese Funktionen werden verwendet, um Daten im Spiel in oder von einem Flash-Bytearray zu lesen und zu schreiben. Der Roboter, die Wiederholung oder die Herausforderung werden dann als postdaten Teil einer Urlrequest an den Server gesendet. Diese Funktionen werden auch von den Merkmalen "Import" und "Exportieren" verwendet, um eine einfache Möglichkeit, zwischen Objekten im Spiel und Text zu konvertieren. Wenn Sie Funktionen hinzufügen möchten, die zusammen mit einem Roboter, einer Wiederholung oder einer Herausforderung gespeichert werden müssen, müssen Sie sie höchstwahrscheinlich explizit in eine dieser Funktionen einbringen.
Der Servercode ist alles im HTDOCS -Unterordner. Es ist vollständig in PHP geschrieben. Ich werde zuerst über den Datenbankservercode sprechen.
Der Datenbankcode befindet sich im Verzeichnis. IncrediBots wurde mit Amazon S3 und SimpledB als Backends gebaut. Weitere Informationen finden Sie unter http://aws.amazon.com. Der größte Teil des DB -Servercodes wird speziell in diesem Sinne geschrieben, und leider habe ich mich nie so umgesetzt, dass die Datenbankschicht in einem gemeinsamen Paket abstrahiert wird. Daher kann es eine Menge Arbeit sein, auf so etwas wie MySQL zu wechseln, obwohl es genauso gut funktionieren würde wie SimpedB und S3, wenn es richtig gewartet wird.
Beachten Sie, dass IncrediBots auch MySQL in der Datenbank von PHPBB -Foren verwenden. Da wir sowohl für das Spiel als auch für die Foren eine einzige Anmeldung hatten, werden alle Benutzerkonten über die Tabelle Phpbb_Users der Foren verwaltet. Aus diesem Grund ist der PHPBBBB -Forencode im Paket enthalten. Ich musste einige Änderungen am Forencode vornehmen, um das einzelne Login funktionieren zu lassen, sowie einige andere Funktionen, z. B. die Fähigkeit, Roboter in Forum -Posts einzubetten. Das einfache Login und das Erstellen neuer Konten sollten jedoch bei jeder Version von PhpBB -Laufen gut funktionieren, und es sollte nicht zu schwierig sein, die Anmeldungsfunktion zu ändern, um mit der gewünschten Datenbank/dem gewünschten System zu arbeiten.
Der aktuelle Datenbankcode sollte mit jedem Amazon AWS -Konto einwandfrei funktionieren. Die einzigen Dinge, die geändert werden müssen, sind die Anmeldeinformationen in der Datei Common_variables.php. Abgesehen davon entspricht jede GGSCRORS _*. PHP -Datei einer der etwa 20 DB -Vorgänge, die der Client aufrufen kann. Alle Anrufe werden ursprünglich an ggScores.php gerichtet, das die richtige Datei enthält, die dem Parameter "OP" entspricht. Jede Operation spricht dann mit der Amazon -Datenbank (oder Phpbb_Users -Tabelle in MySQL) und spiegelt eine Antwort für den Client heraus. Die Binärdaten für alle Roboter, Wiederholungen und Herausforderungen werden über HTTP -Postdaten an den Server gesendet und in S3 als Blobs gespeichert, wobei eine kleine Menge Metadaten für jeden in SimpledB gespeicherten in SimpledB gespeichert sind.
Hinweis: Eine Sache, die eine gute Idee sein kann, ist eine MD5 -Prüfsummenvalidierung beim Senden der Binärdaten vom Client an den Server, um sich gegen Paketbeschäftigung zu schützen. Ich weiß, dass dies in der Vergangenheit ein paar Mal geschehen ist, und wenn dies der Fall ist, wird der betroffene Roboter/Wiederholung/Herausforderung korrupt und ist für immer verloren ... (Dun Dun Dun!)
Der Rest des Servercodes enthält hauptsächlich Komponenten der IncrediBots -Website. Die Seite Index.php enthält Code, um das SWF einzubetten und ordnungsgemäß anzuzeigen. Um einen SWF zu hosten, laden Sie die SWF -Datei, die aus dem Erstellen des Clients namens IncrediBots.swf (oder IncrediBots2.SWF) in das gleiche Verzeichnis wie Index.php resultiert. Die Seite user.php ist auch hier, auf der alle Roboter, Wiederholungen und Herausforderungen angezeigt werden, die von einem bestimmten Benutzer in einer (etwas) gut formatierten Webseite hochgeladen wurden.
IncrediBots wurde ursprünglich von Ryan Clark entworfen, das von Oliver Trujillo mit Kunst von Matt Parry programmiert wurde. Ein großer Kredit sollte auch an Erin Catto und die Box2d Physics Engine sowie an den Flash -Port davon gehen, auf dem unser Spiel gebaut wird. http://www.box2d.org/ http://box2dflash.sourceforge.net/
IncrediBots ist wahrscheinlich das Spiel, an dem ich am meisten Spaß gemacht habe. Es war eine tolle Zeit, all die verrückten Kreationen der IncrediBots -Community zu überprüfen, und ich wünsche Ihnen alles Gute für die Leitung von unglaublichen Läufen. Prost und Happy Bot Building!
- Oliver