Elferchallenge technisch Flash
Nach langer Pause wurde die Elferchallenge wieder ins Leben geholt. Ursprünglich in Flash geschrieben, entwickelt und designed musste das ganze Projekt erst einmal in ein reines Actionscript 3 Projekt mit PHP Anbindung umgewandelt werden. Die Hauptlogik stecke diesmal in den PHP Funktionen und Flash wertete die Ergebnisse aus. Die größte Hürde hierbei war wohl das Speichern der Session das in PHP ein gewisses Problem darstellte, da das Speichern in Cookies innerhalb eines iFrames nicht möglich ist. Flashseitig bestand das größte Problem wohl darin, dass man die PHP Aufrufe in der richtigen Reihenfolge rufen musste und dies teilweise auch wiederholt tun musste. Grundsätzlich wurde in Flex 3.5, also mit Flash 9.0, entwickelt um Benutzern mit einer älteren Flash Version ebenfalls das Spielen zu ermöglichen. Das ganze Spiel besteht aus 6 Grundphasen, zu allererst einmal die Anmeldung bei der sich der Spieler ein Land auswählen durfte, anschließen ein Hauptbereich der bei jedem öffnen des Spiels angezeigt wird und die Möglichkeit bietet auch im nachhinein die gesprochene Sprache zu ändern.
In der 3ten Phase erhällt der Benutzer Informationen über Herausforderungen anderer Spieler, fertig gespielte Spiele und eine Rangliste die in eine Länder-, Einzel- und Freundeswertung unterteilt ist, auf die ich später noch einmal eingehen werde, desweiteren wird unter der Rangliste noch ein Spieler aus der vorher ausgewählten Nation mitsamt den gesamt gespielten Spielen, den gewonnen Spielen, verlorenen Spielen, unentschieden ausgegangenen Spielen, die Punkte und die Platzierung angezeigt.
Zusätzlich besteht die Möglichkeit alle Listen zu aktualisieren, eine Hilfestellung einzusehen oder bereits hier die Geräusche abzustellen. Diese Einstellung wird in einem Flashcookie also einem SharedObject ( Actionscript 3 ) gespeichert.
protected var muteCookie:SharedObject =
SharedObject.getLocal("Elferchallenge_Cookie");
...
muteCookie.data.soundONOFF = muteClicked;
muteCookie.flush();
Der Vorteil eines Flashcookies im Vergleich zu einem normalen Cookie besteht darin, dass ein Flashcookie direkt in das Dateisystem gespeichert wird und nicht vom jeweiligen Browser verarbeitet wird. Um einen Spieler innerhalb seiner Facebookfreunde herauszufordern muss man nur auf den Button “Challenge!!!” klicken, hierbei werden alle Freunde eines Spielers aus dem Ergebnis eines vorher abgesetzten PHP Aufrufs angezeigt. Nun kommt man in die 4te Phase in welcher man die 5 Schuss und 5 Haltepositionen wählt. Jeder vorher auf der Stage platzierte Ball, und auch Handschuh, besteht aus einem Objekt in dem der Movieclip und eine Zählvariable angegeben sind, dies war notwendig um auf die Position die der Benutzer wählt, die in beliebiger Reihenfolge stattfinden kann, zuzugreifen.
for( var i:int = 0; i < 5; i++ ) {
ballArray[i] = {image:AssetManager.getAsset( "ball" )
as MovieClip, id:i };
handsArray[i] = { image:AssetManager.getAsset( "handschuhe" )
as MovieClip, id:i };
numberArray[i] = i;
}
Nun kann der Benutzer entscheiden, ob er den Spieler wirklich Herausfordern möchte oder ob er dies doch nicht mehr möchte, auf jeden Fall wird nun ein dispatchEvent geworfen anhand dem dann ein PHP Aufruf mit einer Objektklasse gesendet wird und der Screen gelöscht werden kann. Die Objektklasse hat lediglich die Aufgabe die übergebenen Parameter, wie Spieler-ID und die Postionen, in ein MatchObject zu speichern, welches dann innerhalb von PHP verarbeitet werden kann.
matchObject.mID = mID; matchObject.cName = cName; matchObject.cID = cID; matchObject.cShots = cShots; matchObject.cBlocks = cBlocks; matchObject.cNation = cNation; matchObject.oName = oName; matchObject.oID = oID; matchObject.oShots = oShots; matchObject.oBlocks = oBlocks; matchObject.oNation = oNation; matchObject.maxPage = maxPage;
Die 5te Phase besteht darin sich ein Spiel an zugucken um es Schlussendlich zu beenden und die Punkte, egal ob Sieg, Niederlage oder Unentschieden, zu vergeben. Bevor die Animation jedoch abgespielt werden kann, wird anhand der vorher gewählten und in einer Datenbank via PHP abgespeicherten Nation die entsprechende Spieler SWF-Datei geladen. Danach werden die gesamten Animationen von einer Funktion überwacht womit gewährleistet ist, dass die Animationen gleichmäßig abgespielt werden. Wenn alle Animationen abgespielt sind, kann nun wieder ein dispatchEvent geworfen, anhand dem dann die 6te Phase gelangt und eine neue Klasse gerufen wird welche den Endstand des Spieles anzeigt und ein weiterer PHP Aufruf der das Ergebnis in die Datenbank speichert und es dann aus der Liste der gespielten Spiele gelöscht wird. Hier besteht dann noch die Möglichkeit den Spieler erneut zu fordern.
Im Informationsbereich wieder angelangt werden die Listen automatisch aktualisiert. Nun möchte ich auf die Highscoreliste etwas näher angehen. Die Highscoreliste besteht aus mehreren Bereichen, zuerst ein mal der Navigationsbereich oben rechts in dem man sich die verschiedenen Listen angucken kann, dann der Bereich direkt darunter in dem der Inhalt der jeweiligen Liste angezeigt wird, danach folgt eine kleine Navigationsleiste auf der die Seitenanzahl und Navigationspfeile angezeigt werden und ganz unten ist der Bereich in dem die aktuelle Position des Spielers zwischen den anderen Spielern der jeweiligen Liste angezeigt wird. Alle Listen werden per PHP Aufruf empfangen und verarbeitet. Dabei besteht jede Liste aus 2 Objekten, zum einen die eigentliche Liste und zum anderen die jeweilige Platzierung. In der Länderrangliste gibt es zu dem eine Besonderheit zu lösen. Das Objekt welches die Informationen besitzt gibt nur die Länderkürzel mit, also musste zuerst das gesamte Array durchsucht und die Länderkürzel durch die ganzen Ländernamen ersetzt werden.
for each( var element:Object in arr ) {
if( ( element != null ) && ( element != "null" ) ) {
if( translator.iso == "de" ) {
fullName.push( {place:element.pos,
cName:ElferchallengeConfig.fullCountryNameDE[
ElferchallengeConfig.countryArray.indexOf(
element.iso,0 ) ],
country:element.iso,
games:element.total_played,
wins:element.wins,
losses:element.losses,
draws:element.draws,
punkte:element.points} );
}
else {
fullName.push( {place:element.pos,
cName:ElferchallengeConfig.fullCountryNameEN[
ElferchallengeConfig.countryArray.indexOf(
element.iso,0 ) ],
country:element.iso,
games:element.total_played,
wins:element.wins,
losses:element.losses,
draws:element.draws,
punkte:element.points} );
}
}
}
Das gleiche muss, durch die Möglichkeit zwischen Deutsch und Englisch hin und her zu schalten, auch für die Englische Sprache verarbeitet werden.
Das war also ein kleiner Einblick in den technischen Flash Teil von Elferchallenge, man liest sich.
