BASIC

Author Topic: Array mit dynamischer Größe in 2. Dimension  (Read 1553 times)

Offline S. P. Gardebiter

  • Mr. Polyvector
  • ***
  • Posts: 245
    • View Profile
    • Tile 44 Interactive
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.
« Last Edit: 2011-May-12 by S. P. Gardebiter »
~ Cave Story rules! ~

Offline backslider

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 892
    • View Profile
Re: Array mit dynamischer Größe in 2. Dimension
« Reply #1 on: 2011-May-12 »
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
 

Offline S. P. Gardebiter

  • Mr. Polyvector
  • ***
  • Posts: 245
    • View Profile
    • Tile 44 Interactive
Re: Array mit dynamischer Größe in 2. Dimension
« Reply #2 on: 2011-May-12 »
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:
« Last Edit: 2011-May-12 by S. P. Gardebiter »
~ Cave Story rules! ~

Offline Slydog

  • Prof. Inline
  • *****
  • Posts: 930
  • KodeSource
    • View Profile
    • KodeSource
Re: Array mit dynamischer Größe in 2. Dimension
« Reply #3 on: 2011-May-12 »
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]

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10715
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Re: Array mit dynamischer Größe in 2. Dimension
« Reply #4 on: 2011-May-13 »
TYPES sind mindestens so schnell wie Felder. 2D Felder machen GLasic (minimal) lnagasmer -> daher lieber 1D Felder und Types.