| |||||||
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) |
| Neuer User Registriert seit: Mar 2006
Beiträge: 1.573
| TileBased Game und Gebäudeverwaltung
Wollte mal kurz eure Anregungen hören ![]() Folgende Situation: Wenn ich eine TileBased Map habe und diese über einen 2D-Array verwalte komm ich zu folgendem Problem. Der Array wäre wie gesagt ungefähr so aufgebaut: Code: [ [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0] ] Nun überlege ich aber wie ich es anstellen kann, dass ich Gebäude unterschiedlicher Dimension einbauen kann sprich ein Gebäude das vom Grundriss nicht unbedingt eine n x n Größe hat sondern vllt sowas: Code: [ [a, b, c], [d, 0, 0] ] Das Problem was ich habe ist ja, dass ich zwar in die Map einfach die entsprechende BitmapZahl eintragen könnte, ABER ich möchte es ja auch so anstellen, dass das Gebäude dann bei jedem seiner Sprites anklickbar ist um dieses eventuell zu verwalten. Nun frage ich euch wie ist es am sinnvollsten? - Einfach die Sprites in die Map zu schreiben und die Verwaltung einfach auslagern in eine Klasse für dieses Gebäude, dass bei Klicks auf gewisse Tiles anspringt? - Den Array abzuändern und dort die Tiles selber reinzuschreiben, sprich die Klasse für das Gebäude hätte selber mehrere Tiles. Ich möchte es natürlich so praktisch wie möglich machen, ohne viel aufwand zu erzeugen und in dier Hierarchie herumzuhüpfen oder mich zu den jeweiligen Klassen hochzuarbeiten. Würd mich über ein paar Vorschläge freuen
__________________ Currently working on: - --- --- ----------------------------------------------------------------- ActionScript 3.0, C++, Java, Delphi |
| | |
| | #2 (permalink) |
| Flashbitch Registriert seit: Oct 2003 Ort: Hannover
Beiträge: 279
|
Spontan fällt mir die Möglichkeit ein das du nicht einzelne werte in das array schreibst sondenr ein Objekt. z.b. um dein beispiel aufzugreifen. Code: [
[{id:10},{id:0,parent:new Point(0,0)}, {id:0,parent:new Point(0,0)}],
[{id:0,parent:new Point(0,0)}, 0, 0]
] dan nschaust du ob die zelle ein untergeordnetes Tile ist. d.h. die parent.x und parent.y geben die Ursprungszelle an, die ist in diesem fall 0/0. so kannst du die rauskriegen welche sprite ID dazugehört. falsl du jetzt z.b. belim klicken auf auf zelle 2/0 das sprite aus dem array löschen willst würde ich wieder vom parent aus ausgehen und mit einer schleife die umliegenden felder durchschauen ob es zellen gibt die zu dem parent tile hinzeigen. da leert man entsprechend den inhalt im array. es gibt da bestimmt noch andere methode, aber die ist mir spontan in den kopf gekommen
__________________ Fuchtelworld |
| | |
| | #3 (permalink) |
| Keine Panik Registriert seit: Apr 2010 Ort: Düsseldorf (im ernst)
Beiträge: 1.869
|
ich würde es wohl so machen: 3 Listen, - die map - Liste der Gebäude - Liste der Grafiken in der Map würde ich Hash-werte nehmen: uint bietet 32 Bit zahlenraum die ersten 16 Bit für als ID des Gebäudes, die letzten 16 als Definition für Grafiken. ein Beispiel: Wert für das Feld in der Map: 1376391 Binär: wert: 0000 0000 0001 0101 0000 0000 1000 0111 gebäude_nr: 0000 0000 0001 0101 grafik_nr: 0000 0000 1000 0111 Hexadezimal: wert: 0015 0087 gebäude_nr: 0015 grafik_nr: 0087 Dezimal: wert: 1376391 gebäude_nr: 21 grafik_nr: 135 und auch wenn das jetzt kompliziert klingen mag ist das im Code garnicht: ActionScript:
Sinn: - daten sind sehr kompakt - Bit-Operationen sind seeeehr performant! - ein uint-wert verbraucht sicher weniger Platz als jedes Objekt/Array - du kannst so 65535 Gebäude und 65535 verschiedene Grafiken verwalten. - alle weiteren Informationen zum Gebäude verwaltest du in der Gebäudeliste. weiterhin würde ich beim Gebäude auch eine Liste der belegten Felder mit abspeichern Geändert von thomas_E (23-04-2010 um 20:56 Uhr) |
| | |
| | #4 (permalink) |
| Neuer User Registriert seit: Mar 2006
Beiträge: 1.573
|
Das ist eine gute Idee ^^ Das ich keine Objekte reinschreiben wollte war eben der Punkt an dem ich verzweifelt bin aber alle 3 Werte durch ein uint darzustellen ist perfekt ![]() Vielen dank
__________________ Currently working on: - --- --- ----------------------------------------------------------------- ActionScript 3.0, C++, Java, Delphi |
| | |
| | #5 (permalink) | |
| Keine Panik Registriert seit: Apr 2010 Ort: Düsseldorf (im ernst)
Beiträge: 1.869
| Zitat:
hab ich was übersehen? du weisst, dass du die Bereiche dann aber anders einteilen musst (nicht 16+16+x) du hast 32 Bits zur verfügung und musst darin festlegen, welches "Feld" wiviel davon in Anspruch nimmt. dementsprechend die Anzahl der darin zur Verfügung liegenden Kombinationen. | |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Mathematik.. -> TileBased Kollisionsabfrage | schmidi | Spielkonzepte und Spieleprogrammierung | 12 | 04-01-2007 15:52 |
| TileBased-Game Frage zum sinnvollen erstellen von Tile-Objekten | utman6 | Spielkonzepte und Spieleprogrammierung | 4 | 17-04-2006 18:32 |
| textfeld erstellen in tileBased-game | springingerl | ActionScript 1 | 2 | 16-12-2005 09:06 |
| Tilebased Game - Performance? | modularmax | Flash MX 2004 | 5 | 14-10-2005 12:56 |
| Deutsche übersetzung von tilebased game tutorial ! | Showmaker | Am Rande | 20 | 05-04-2005 08:11 |