Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-09-2007, 22:21   #1 (permalink)
Raven-Kid
 
Benutzerbild von [RK]
 
Registriert seit: Feb 2006
Beiträge: 350
Library-Array, Programmbibliothek - wie darauf verweisen?

Hallo!

Ich hab eine mehr oder weniger große Applikation und daher haufenweise externe XML-Files usw. Das Problem ist das ich einfach nicht weis wie all die Instanzen heissen die ich ansprechen will und das versuche ich so zu lösen, indem alle Instanzen in einem Mehrdimensionalen Array stecken. Per IDName kann ich dann die Instanzen dann auch richtig aufrufen, egal ob sie irgendwo verschachtelt sind, seltsam kryptische Namen haben oder ähnliches.

zb. myArray["Spielfiguren"]["NPCs"]["Peter"] ...

Nun sollen aber auch diverse Klassen mit diesem Library-Array arbeiten. Nur wie mach ich das am besten? Das Array im _root lassen und immer auf _root verweisen? Wirklich jedem Objekt das Array übergeben oder tatsächlich das Array per _global ... global machen? Funktioniert das dann überhaupt innerhalb von Klassen? Mein Gedanke wäre nun eine static Class gewesen. Aber gibt es vll eine bessere Möglichkeit?

Ich hoffe ihr habt mich verstanden und könnt mir evt. helfen.
Ich hoffe auch das das Forum nicht all zu falsch gewählt ist ... :\

Geändert von [RK] (22-09-2007 um 22:23 Uhr)
[RK] ist offline   Mit Zitat antworten
Alt 22-09-2007, 22:31   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.348
Naja, wenn du nur eine Mehrdimensionales Array benutzt kannst du auch mit _root arbeiten. Wenn der Rest nicht klassenbasiert und das Array reicht...

Ich weiss ja nicht, was mit dm Spiel noch passieren soll und wie der alllgemeine Aufbau ist.
Omega Psi ist offline   Mit Zitat antworten
Alt 22-09-2007, 22:42   #3 (permalink)
Raven-Kid
 
Benutzerbild von [RK]
 
Registriert seit: Feb 2006
Beiträge: 350
Aus diversen XML-Files werden die Eigenschaften eines Characters ausgelesen. Aus diesen Eigenschaften wird dann ein Character aus der Actor-Klasse erstellt.

Code:
  1. new Actor("Harkan",100); // erzeugt einen Spieler mit dem IDNamen "Harkan" und 100 Leben
  2.  

Da ich aber keinerlei Ahnung habe wie der Instanzname des Spielers lautet um ihn im nachhinein ansprechen zu können, steck ich ihn in ein Array.

Code:
  1. LibraryLinker["Spieler"]["Harkan"] = new Actor("Harkan",100);

Natürlich sieht der Syntax nicht genau so aus, aber im grunde würde man es so per Hand schreiben. Der IDName wird eben im XML-File festgehalten und über diesen IDNamen wird der Actor erstellt, und in ein Array gesteckt. Damit ich ihn nun zb. von A nach B schicken kann, ruf ich über das Array den Spieler auf.

Code:
  1. LibraryLinker["Spieler"]["Harkan"].gotoPos(xpos,ypos);

Wenn ich ihn nun aber zb zu einem Wegpunkt gehen lassen will sieht das nun zb so aus:

Code:
  1. LibraryLinker["Spieler"]["Harkan"].gotoWaypoint(LibraryLinker["Waypoints"]["WP1"]);

Denn auch der Waypoint wird über ein XML-File erstellt und in den LibraryLinker gesteckt.


Damit ich nun aber nicht auch bei der Parameterübergabe jedesmal erst auf den LibraryLinker referenzieren muss will ich das jede Klasse (zb. die Actorklasse meiner Spielfiguren) den LibraryLinker kennt. So das ich zb nur noch LibraryLinker["Spieler"]["Harkan"].gotoWaypoint("WP1"); schreiben muss.

Ich brauch das nicht nur aus reiner Faulheit
Teilweise gibt es intern Methoden die es durchaus erfordern diverse Sachen in der Umgebung abzuprüfen. Zum Beispiel soll sich der Spieler eigenständig von A nach B bewegen können, wenn die Methode roam(); aufgerufen wird.
[RK] ist offline   Mit Zitat antworten
Alt 22-09-2007, 23:07   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.348
1. Ist das ein Multiplayer Game?
2. Arbeitest du kosequent zu Laufzeit auf der XML als Datenstruktur?
3. Aus der Struktu werde ich gerade noch nicht so ganz schlau...
Omega Psi ist offline   Mit Zitat antworten
Alt 23-09-2007, 08:01   #5 (permalink)
Raven-Kid
 
Benutzerbild von [RK]
 
Registriert seit: Feb 2006
Beiträge: 350
1. Nein
2. Ja

3. Hmmm,... Ist alles nicht ganz so einfach.
Aber ich denke ich hab schon eine gute Lösung gefunden. Wenn die nun auch nicht so ganz hinhaut, meld ich mich wieder ... Danke jedenfalls trotzdem
[RK] ist offline   Mit Zitat antworten
Alt 23-09-2007, 08:17   #6 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.348
Ich sag's mal so... auf der XML als Datenstruktur zu arbeiten ist nicht so klug...
Omega Psi ist offline   Mit Zitat antworten
Alt 23-09-2007, 08:47   #7 (permalink)
Raven-Kid
 
Benutzerbild von [RK]
 
Registriert seit: Feb 2006
Beiträge: 350
Hrm,... wieso denn nicht?
Ich mein absolut überall muss es theoretisch eh nicht verwendet werden. Nur würd ich halt gern wissen was daran denn schlecht ist ... :\

Also das Spiel wird eigentlich erst zur Laufzeit wirklich erstellt. Alle Spielrelevanten Daten wie, Eigenschaften der Spielfiguren und ihre X,Y-Positionen im Level, die Grafiken im Level und sogar spezielle Trigger werden aus XML eingelesen. Das einzige was ich nun eig. machen muss um ein Spiel zu erstellen ist die jeweiligen XML-Files zu schreiben. (hierfür gibt es einen umfangreichen Editor) Wenn ich nun zum Beispiel einen Trigger programmieren will, der ausgelöst werden soll wenn man sich in einem bestimmten Bereich befindet sieht das XML-File ca so aus:

Code:
<trigger>
    <info id="trigger_01" hitzone="hitfield_01" />
    <events>
        <event funktionsname="startSound" parameter="alarm.wav,20" />
        <event funktionsname="ActorGotoWP" parameter="WP_01" />
    </events>
</trigger>
Das ganze sieht dann in ActionScript ca so aus:

Code:
LibraryLinker["Trigger"]["trigger_01"] = new Trigger("trigger_01","hitfield_01");
LibraryLinker["Trigger"]["trigger_01"]._events[0] = new Event("startSound",["alarm.wav",20]);
LibraryLinker["Trigger"]["trigger_01"]._events[1] = new Event("ActorGotoWP",["WP_01"]);
Also das XML könnte man theoretisch umgehen ... weil es ja dann so oder so auf das AS reduziert wird.
Der Editor könnte eig. auch *.as Datein erzeugen, sofern die nicht irgendwie codiert und oder komprimiert sind.

Geändert von [RK] (23-09-2007 um 08:49 Uhr)
[RK] ist offline   Mit Zitat antworten
Alt 23-09-2007, 09:18   #8 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.348
Schlecht ist es aus 2 Gründen:
1. Du hast die ganze Laufzeit über die DOM-Representation im Speicher (unperformant).
2. Wenn Änderungen in der XML anfallen kann es sein, dass du das gesamte Spiel zerschiesst.

Ich würde dir raten, so wie ich es schon oft auch anderen riet, die XML beim der Initialisierung der Spieles/Applikation auf Klassen zu übertragen. das ist wesendlich übersichtlicher, leichter zu erweitern und nebenbei auch die Art und Weise, wie in der Praxis gearbeitet wird:

Applikation initailisieren -> die nötigen Daten holen aus der Datenhaltung (XML, Datenbank...) -> Datenstrukturen aufbauen -> Anwendung starten.
Omega Psi ist offline   Mit Zitat antworten
Alt 23-09-2007, 09:53   #9 (permalink)
Raven-Kid
 
Benutzerbild von [RK]
 
Registriert seit: Feb 2006
Beiträge: 350
Achso! Tut mir leid das ich das vll. schlecht erklärt habe ...
Genau so mach ich das nämlich

Das ganze wird nur 1mal beim starten des Spieles gemacht. Nicht benötigte Daten werden gelöscht, bzw. gar nicht erst geladen und wärend des Spieles wird nichts mehr aus irgendwelchen Daten ausgelesen. Nur zb. bei Levelwechsel werden neue Informationen ausgelesen und nicht benötigte wieder rausgelöscht ...

Geändert von [RK] (23-09-2007 um 09:54 Uhr)
[RK] ist offline   Mit Zitat antworten
Alt 23-09-2007, 10:01   #10 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.348
Na, aber dann bau dir anstatt eines mehrdimensionales Array eine Klasse die die Zugriffe besser kapselt.
Omega Psi ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2014 Marc Thiele