| |||||||
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) |
| wau Registriert seit: Jan 2006 Ort: Hamburch
Beiträge: 404
| Inventar (Theorie)
Hi, Ich Bastel grad an einem Inventar und hab mir dabei mal ein paar grundlegende Fragen gestellt, da ich eine Klasse dafür erstellen möchte. Dabei besteht ein Inventar für mich aus: 1) dem Inventar 2) den Slots 3) den Items Nun hab ich mich (in einem Brainstorm) gefragt, was man alles mit Items machen kann? a) man kann Item(s) dem Inventar hinzufügen (Add) b) man kann Item(s) aus dem Inventar löschen (Delete) c) man kann zwei Items miteinander verschmelzen(daraus entsteht ein neues Item (Fuse) d) man kann die Positionen(Slots) der Items austauschen (Swap) e) man kann Items gleichen Typs zusammenlegen(Collect) f) man kann Items teilen (aufteilen) (Split) g) man kann Items nach bestimmter Zeit verschwinden lassen! (Dissapear) Beispiel: c) Man hat zB. einen Angelhaken und einen Stock und bekommt daraus eine Angel. e) man hat mehere Steine zusammengesammelt und möchte sie auf ein Slot zusammenlegen. f) zB. eine brennende Kerze, die nach bestimmter Zeit erlischt. Weiters kann man die Slots der Items nach mehreren Kriterien sortieren: - nach gleichen Namen, Typ, Kathegorie - nach ihrer Wichtigkeit? - nach Anzahl der Items usw.. Wobei das Sortieren des Inventars eher nicht so gang und gäbe ist (wenn überhaupt notwendig), da man es dem Spieler meist selbst überlässt. Für das Inventar hab ich nun zwei Klasse angelegt namens: Inventory Items In Inventory leg ich mir ein Array an (elements) was alle meine Objekte vom Typ "Items" hält. Weiteres sind darin auch die Methoden "Add", "Delete" usw. In der Klasse "Items" halte ich die Eigenschaften des Items, also Name, Anzahl usw.. Was denkt ihr davon? Gibt es evtl noch andere Sachen, die man mit Items in einem Inventory machen kann, die ich vergessen hab? Im Laufe des weiterbauens des Games kommen einem ja meistens immer neue Ideen, was man mit Items so machen kann, weshalb ich das vorab schon klären will. Falls Interesse besteht, kann ich die Klasse auch posten, wollte mir aber primär erstmal Gedanken manchen, wie ein Inventar ausschaut.
__________________ Say no to Internet Explorer 6! Geändert von Circushund (29-08-2007 um 22:00 Uhr) |
| | |
| | #2 (permalink) |
| voidboy Registriert seit: Sep 2004 Ort: München
Beiträge: 5.588
|
Was deine Items können und nicht können musst du dir vorher schon grob überlegen, da kann dir sicher keiner richtig helfen ohne zu wissen wie dynamisch dein System sein soll. Aber wo hast du denn derzeit die Klasse Slot, oder nutzt du keine? Würde nämlich statt einem normalem Item Array doch lieber ein Slot Array nehmen. Somit kannst du später abfragen wieviel freie Slots noch verfügbar sind. |
| | |
| | #3 (permalink) | |
| wau Registriert seit: Jan 2006 Ort: Hamburch
Beiträge: 404
| Zitat:
![]() Ich hab eine Test-FLA mit den zwei Klassen mal hochgeladen zum ausprobieren. www.dwienand.de/Expo/InventarTest.zip (Link wird in spätestens 1. Monat gelöscht)
__________________ Say no to Internet Explorer 6! | |
| | |
| | #4 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.147
|
Ich würde eine Menge Service-Methoden implementieren: ActionScript:
__________________ http://icodeapps.net | Meet me at the Flex user group Hamburg talking about CoffeeScript Geändert von Omega Psi (30-08-2007 um 09:00 Uhr) |
| | |
| | #5 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.147
|
Hm, auch auf die Gefahr hin, dass ich mich gerade unbeliebt mache, aber du testest nicht gerade effizient. Ich würde das alles erstmal über die Textausgabe testen. Die Klassen kannst du dann als Member oder via Verlinkung mit grafischen Objekten in Beziehung setzen.
__________________ http://icodeapps.net | Meet me at the Flex user group Hamburg talking about CoffeeScript |
| | |
| | #6 (permalink) | |
| wau Registriert seit: Jan 2006 Ort: Hamburch
Beiträge: 404
|
hi omega, Zitat:
Und wie als Member? Man kann ja unter "Verlinkung" einen Klasse "für die Gemeinsame Nutzung zur Laufzeit" angeben, meinst du das?
__________________ Say no to Internet Explorer 6! | |
| | |
| | #7 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.147
|
Sorry, ich hab da in deinem Code einiges durcheinander gebracht. Trotzdem werde ich aus deinem Code nicht ganz schlau. Wieso kennt ein Item seinen Slot? Und wieso wird count unabhängig vom Slot gesetzt? Das ganze ist schon unglücklich gelöst, weil du Abhängigkeite erzeugst, die nicht richti sind. Was ist wenn du einen Slots setzt, aber den Index des Slots falsch. Hinzukommt, dass sich Items nicht untereinander organisieren. Dafür ist das Inventar da. Ich hab mal ein kleines Beispiel gemacht, was etwas mehr Sinn macht.
__________________ http://icodeapps.net | Meet me at the Flex user group Hamburg talking about CoffeeScript |
| | |
| | #8 (permalink) | |
| wau Registriert seit: Jan 2006 Ort: Hamburch
Beiträge: 404
|
hi omega, Zitat:
Und stimmt, das mit den unnötigen Abhänigkeiten ist meist mein Grösstes Problem, wo ich am meisten zu knacken hab .Allerdings hast du in deiner Klasse noch nicht die grundlegenden Operationen (bis auf adden!) integriert. Ich hab nochmal eine Grafik gemacht, welche primären "Operationen" (sag ich jetzt mal so in meinem Leien-Programmierdeutsch ) man auf ein Inventar anwenden könnte.
__________________ Say no to Internet Explorer 6! | |
| | |
| | #9 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.147
|
Naja, ich könnte natürlich auch alle anderen Funktionen implementieren, aber ich habe halt nur ein Beispiel gemacht, dass folgendes demonstrieren sollte: Wie stelle ich Abhängigkeiten zwischen zwei Klassen sinnvoll her. Die zu implementierenden Methoden sind auch nicht großartig schwer zu implementieren, da es nur Array-Operationen sind. Du brauchst aber bei den Items noch andere Funktionen, vor allen Dingen wenn es um die fuse():Void geht. Da musst du dir mal klar machen, was fusioniert werden soll. Die Abhängigkeiten kannst du so klären: Die Inventory und Item Klassen kannt du so übernehmen. Diese kapselst du jeweils in eine MovieClip-Klasse: ActionScript:
ActionScript:
__________________ http://icodeapps.net | Meet me at the Flex user group Hamburg talking about CoffeeScript |
| | |
| | #10 (permalink) | |
| wau Registriert seit: Jan 2006 Ort: Hamburch
Beiträge: 404
|
Hi omega, Zitat:
Und wozu nimmst du "screen"<Punkt>"Inventory" und "data"<Punkt>"Inventory" bzw. "data"<punkt>"Item"? Ich weiss eigetlich auch nicht, wozu ich eigentlich die MC-Klasse "extenden" sollte? Auch müsste ich das Ganze dann auch auf mein Inventory irgendwie übertragen, dh. das Ganze Drag-Drop fähig machen. Da müsste man dann wohl auch viel mit Indexes arbeiten?
__________________ Say no to Internet Explorer 6! | |
| | |
| | #11 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.147
|
Ich lege zwei packages an: screen und data. In dem Paket screen verwalte ich alle Klassen, die eine optische Representation der Daten realisieren (daher auch das Erben von MovieClip). Paket data verwalte ich das Datenmodell das ich durch Komposition einbinde. Vorteil: ich kann meine Spiele Engine unabhängig der Darstellung programmieren und was noch viel wichtiger ist, in den elementaren Funktionalitäten auch in anderen Spielen wiederverwenden oder unabhängig vom Spiel selbst weiterentwickeln. Du muss auch mit gar keinen Indizes arbeiten, weil du mit den referenzen auf Items arbeitest. Diese werden in ein Array übertragen und mit den entprechenden Funktionen der inventory Klasse sortierst du die Items, suchst dir das richtige Item aus usw. Thema Komposition vs Vererbung möchte ich in diesem Thread aber nicht diskutieren. Ich trenne gerne zwischen Darstellung und Datenmodell und arbeite mit grafischen Primitiven (MovieClips) lieber direkt und baue dadurch lieber meine Klassenbibleothek auf.
__________________ http://icodeapps.net | Meet me at the Flex user group Hamburg talking about CoffeeScript |
| | |
| | #12 (permalink) |
| wau Registriert seit: Jan 2006 Ort: Hamburch
Beiträge: 404
|
hi omega, ok, du gehst wohl wohl ziemlich streng nach dem MVC (Model-View-Contoler)-Paradigma oder? Was ja eigentlich auch eine gute Sache ist, doch ich kenne mich da noch nicht so aus? Die Trennung von Visuellen und der Data-Komponente ist natürlich eine gute Sache nur ich weiss eben nicht wie ich das umsetzen kann? Also wie sähe das Praktisch aus? Ich mach mir zwei Ordner, nenn den einen Screen, den Anderen Date und pack da meine .as's rein? In den Screen Ordner kommt die "Inventory" und in den "Data"-Ordner die "Item.as"?
__________________ Say no to Internet Explorer 6! |
| | |
| | #13 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.147
|
Praktisch sähe eine Umstzung in der verzeichnisstruktur so aus: Applikation.fla classes/data/Inventory.as classes/data/Item.as classes/screen/Inventory.as classes/screen/Item.as tests/InventoryTest.fla tests/ItemTest.fla Du könntest auch alles in eine Klasse packen, doch ich persönlich trenne gerne die Datenhaltung von der Datenvisualisierung.
__________________ http://icodeapps.net | Meet me at the Flex user group Hamburg talking about CoffeeScript |
| | |
| | #15 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.147
|
Kann man machen, mir persönlichen reichen die Pakete um zu navigieren.
__________________ http://icodeapps.net | Meet me at the Flex user group Hamburg talking about CoffeeScript |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |