| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Raven-Kid 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) |
| | |
| | #2 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.898
| 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. |
| | |
| | #3 (permalink) |
| Raven-Kid 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:
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:
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:
Wenn ich ihn nun aber zb zu einem Wegpunkt gehen lassen will sieht das nun zb so aus: Code:
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. |
| | |
| | #7 (permalink) |
| Raven-Kid 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> 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"]); 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) |
| | |
| | #8 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.898
| 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. |
| | |
| | #9 (permalink) |
| Raven-Kid 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) |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |