Array mit dynamischer Größe in 2. Dimension

Previous topic - Next topic

S. P. Gardebiter

Hallo.
Ich weiß gerade nicht so recht wie ich das realisieren soll. In meinem Spiel gibt es mehrere Ebenen und in jeder Ebene können sich Objekte (Gegner, Gegenstände etc.) befinden. Ich weiß zwar wieviele Ebenen es gibt, weiß jedoch nicht die Anzahl der Objekte pro Ebene. (Sie könnten sich auch vemehren) Da ich RAM einsparen will, möchte ich wissen ob es eine einfache Möglichkeit gibt ein Feld anzulegen, in welchem die erste Dimension völlig statisch ist und dann die Größe in der zweiten Dimension dymanisch ist. Allerdings sollten die Größen der zweiten Dimension je nach erster Dimension optimal sein, dass heißt, ich möchte nicht, dass am Ende nur weil eine der Ebenen mehr Objekte hat, bei allen anderen Ebenen die Dimension auch vergrößert wird, wenn dies unnötig ist.

Sonst bräuchte ich ja keine dynamischen Felder, dann könnte ich mir gleich eine Liste anlegen, das Problem ist dann aber, dass sich die Daten im Laufe der Zeit fragmentieren können. Mit statischen Feldern arbeiten ist auch doof und Fragmente versus unnötiger Speicherverbrauch klingt nicht gerade toll.
~ Cave Story rules! ~

backslider

Ich würde nen Type machen^^

Code (glbasic) Select

TYPE tObject
    //object eigenschaften
ENDTYPE

TYPE tLayer
    objects[] as tObject
ENDTYPE

//layer array
LOCAL layer[]
DIM layer[3]

//objekt ins dynamische array pushen
LOCAL object as tObject
DIMPUSH layer[0].objects[], object

S. P. Gardebiter

#2
Danke für die Hilfe.
Ich versuche zwar in der Regel alles mit Arrays zu machen aber hier erscheint es mir sehr sinnvoll einen Type für den Layer zu benutzen, besonders wenn es anders nicht geht/zu kompliziert wird :)
Danke nochmal.

Edit: Sind Types eigentlich genauso schnell wie Arrays oder gibts bei sehr vielen Objekten die Type benutzen Geschwindigkeitseinbußen? o:
~ Cave Story rules! ~

Slydog

Ich würde Typen zu verwenden mich.

Mit meiner GUI-Code als Beispiel, ich habe ein Haupt-GUI-Array mit Arrays von Typen hinein.
Ein GUI-Definition (die ich Vielfaches, eine für jede Menü) verfügt über mehrere Tasten, mehrere Labels, etc (unterschiedliche Menge).
Meine Taste Typ verfügt über Funktionen wie IsClicked () usw und machen meinen Code ziemlich sauber.
Nutzung
Code (glbasic) Select
FOREACH Taste IN _gui [current_gui]. Tasten []
   IF button.IsClicked () THEN. . .
NEXT


Was Sie fragten wäre wie ein Array eine Dimension, die andere Arrays enthält!
Wie z. B.:
Code (glbasic) Select
LOCAL stuff []
LOCAL Artikel []
LOCAL Waffen []
DIM Zeug [2]
DIM Begriffe [1]
DIM Waffen [1]
Zeug [0] = Artikel []
Zeug [1] = Waffen []


==========================
Original English:
I would use TYPEs too myself.

Using my GUI code as an example, I have a main GUI array, with arrays of types inside.
A GUI definition (which I have multiple of, one for each menu) has multiple buttons, multiple lables, etc (varying quantity).
My button type has functions like IsClicked() etc and make my code fairly clean.
Usage
Code (glbasic) Select
FOREACH button IN _gui[current_gui].buttons[]
  IF button.IsClicked() THEN . . .
NEXT


What you were asking would be like a one dimension array that holds other arrays!
Such as:
Code (glbasic) Select
LOCAL stuff[]
LOCAL items[]
LOCAL weapons[]
DIM stuff[2]
DIM items[1]
DIM weapons[1]
stuff[0] = items[]
stuff[1] = weapons[]
My current project (WIP) :: TwistedMaze <<  [Updated: 2015-11-25]

Kitty Hello

TYPES sind mindestens so schnell wie Felder. 2D Felder machen GLasic (minimal) lnagasmer -> daher lieber 1D Felder und Types.