Dynmische arrays in Types?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

entres

Betreff: Dynmische arrays in Types?

BeitragFr, Sep 07, 2007 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo. Ich bin neu hier, also erstmal schönen Tag!

Ich komme aus der Javawelt und denke daher noch sehr Objektorientiert (Hat man mir in der Schule eingehämmert).

Ich möchte ein Type für ein Tile-basiertes Feld anlegen, wo jedes Element im Feld ein Bild repräsentiert.
Ich weiss dass ich u7ngefähr so vorgehen muss

Code: [AUSKLAPPEN]

Type TileBackground
     Field tiles(Hoehe * Breite)
End Type


Allerdings Weiss ich ja nicht welches Format mein Hintergrund zu Anfang hat, daher meine Frage:
Gibt es eine Möglichkeit Das Array erstmal offen zu halten und erst im Nachhinein die Größe anzupassen und zu befüllen?

Dottakopf

BeitragFr, Sep 07, 2007 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
keine ahnung was du da jetzt genau meinst. aber du kannst arry neu dimensonieren im programm.


Code: [AUSKLAPPEN]

;varriablen speicher etc..

;arry offen dimosionieren
dim ein_arry(0,0)


;dann kommt ne main schleife

 ;code
 ;code

    ;arry befüllen festlegen ka
    dim ein_arry( wert1 , wert2 )

;ende main


zu dem type den du geschrieben hast. Ich weis nicht ob das so richtig ist
"field tiles (höhe * breite)"

ich glaub das muss du beim erstellen des types machen
weist scho des "info.tile = new tile" bla bla

ich hoffe des war hilfreich.

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

Silver_Knee

BeitragFr, Sep 07, 2007 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
es gibt in blitz 2 typen von arrays:
1. Dim-Array
-ist ein frei veränderbarerer merdimensionaler array das geht so:
Code: [AUSKLAPPEN]
Dim array1(100)

oder so
Code: [AUSKLAPPEN]
Dim array2(100,200,300,400)

oder so
Code: [AUSKLAPPEN]
Dim array3(0)
...
...
..
Dim array3(123)

nur dia nazahl der dimensionen ist fest.

2. ein blitzarray
-Blitzarrays kann man überall da einsetzen wo sonst variablen kämen (fast überall). Ihr Nachteil ist dass sie nur eine Dimension haben und fest in ihrer größe sind. Dargestellt weren sie durcheckige klammern hinter den Variablen
zB:
Code: [AUSKLAPPEN]
Local array[3]

oder
Code: [AUSKLAPPEN]
Global array[123]

oder auch
Code: [AUSKLAPPEN]
Type typ
 Field array[1234]
End Type

Willi die Rübe

BeitragFr, Sep 07, 2007 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit Blitzarrays dürfte es möglich sein:

Code: [AUSKLAPPEN]
Const a=2

Type b
   Field c[a]
End Type


Allerdings muss das Blitzarray immer konstant sein.

Edit: Zu spät, Silver_Knees Post war da noch nicht da xD
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon
Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX

At the Farewell Party visit: MySpace | Homepage
 

Dreamora

BeitragFr, Sep 07, 2007 19:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Dynamische Arrays in Types geht nicht.
Diese werden zur Compile Zeit festgelegt.


Wenn du in Types dynamische Mengen von Daten speichern musst hast du 2 Möglichkeiten:

1. Bank
2. Einen LinkedList Container Type integrieren und die dafür nötigen Funktionen um durch die Liste zu gehen und die darin enthaltetenen Daten wieder rauszuholen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

aMul

Sieger des Minimalist Compo 01/13

BeitragFr, Sep 07, 2007 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest dir mal Banks anschauen, deren Größe kannst du verändern, dafür sind sie allerdings etwas langsamer einen kleinen Tick langsamer(normalerweise sollte man den Unterschied nicht bemerken).
Außerdem kannst du mit ihnen unter Umständen viel Speicher sparen, da du nicht auf die feste Integer-Größe von 4 Byte beschränkt bist.

EDIT:
Und wieder mal zu langsam...
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

entres

BeitragSa, Sep 08, 2007 0:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die tollen antworten!
Also ich hab als Referenz http://de.wikibooks.org/wiki/B...b.C3.A4nke

Kann man sich Seicherbänke wie ein freies bytearray vorstellen?
wenn ich ein Bild nach dem Schema erstelle:
Code: [AUSKLAPPEN]
i_bild = LoadImage("bild.bmp")
ist dann i_bild vom typ integer, ähnlich wenn ich eine variable
Code: [AUSKLAPPEN]
meinevar = 123
erstelle?

Ich stell mir das gerade so wie Pointer in C++ vor die auf eine Speicheradresse zeigen.


Wenn ich dann Daten wie hier schreiben möchte:
Code: [AUSKLAPPEN]
PokeInt   Bank,Pos,Wert

ist Pos immer die Position in 4er Byte schritte?

Wenn ja, dann stell ich mir eine Bank für 2 Bilder folgendermaßen vor.
Code: [AUSKLAPPEN]
MeineBank=CreateBank(8) ; 2 * int = 8 Byte

PokeInt   MeineBank,0,LoadImage("Bild1.bmp")
PokeInt   MeineBank,4,LoadImage("Bild2.bmp")


Sorry, dass ich im Moment mir so viel Anfängerfragen nerve. Embarassed
 

Dreamora

BeitragSa, Sep 08, 2007 0:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Deine Anwendung stimmt.
Aber die Position liegt bei dir.

Du kannst zb auch 2 Byte, dann 1 Int und dann wieder 2 Byte speichern und wieder auslesen aus einer Bank.
Deswegen ist es ratsam sich die Struktur irgendwo in einem Kommentar oder einer Dokumentationsfile zu notieren, nicht das du irgendwann etwas falsches raus holst, weil das wird dann sehr schwer zu debuggen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

entres

BeitragSa, Sep 08, 2007 0:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
Deine Anwendung stimmt.
Aber die Position liegt bei dir.

Du kannst zb auch 2 Byte, dann 1 Int und dann wieder 2 Byte speichern und wieder auslesen aus einer Bank.
Deswegen ist es ratsam sich die Struktur irgendwo in einem Kommentar oder einer Dokumentationsfile zu notieren, nicht das du irgendwann etwas falsches raus holst, weil das wird dann sehr schwer zu debuggen.
Danke für die Antwort.


Allerdings wunder ich mich gerade dass
Code: [AUSKLAPPEN]
MeineBank=CreateBank(0) ; 0 statt 8???

PokeInt   MeineBank,0,LoadImage("Bild1.bmp")
PokeInt   MeineBank,4,LoadImage("Bild2.bmp")

Auch funktioniert.
Ich hab zuerst eine Bank von der Größe 0 und pack dann trotzdem einfach zwei Werte rauf.
Wird die Bank dann automatisch vergrößert oder warum funktioniert das?

Hier übrigens mein ganzes Programm
Code: [AUSKLAPPEN]
MeineBank=CreateBank(8) ; 2 * int = 8 Byte

PokeInt   MeineBank,0,LoadImage("Bild1.bmp")
PokeInt   MeineBank,4,LoadImage("Bild2.bmp")

i_Bild = PeekInt(MeineBank, 0)

DrawImage i_bild,0,0


i_Bild = PeekInt(MeineBank, 4)

DrawImage i_bild,100,0



WaitKey

End
 

Dreamora

BeitragSa, Sep 08, 2007 0:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Das würd ich nicht machen.
Das funktioniert aktuell weil durch zufall nichts in den speichert dort geschrieben wurde. (vermute ich zumindest. Ich sehe es als recht schludriges und gefährliches programmieren an etwas zu nutzen was nicht vom Programm alloziert und initiert wurde)
Wenn du eine Bankgrösse ändern willst / musst, ist dafür ResizeBank zu nutzen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

entres

BeitragSa, Sep 08, 2007 0:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
Das würd ich nicht machen.
Das funktioniert aktuell weil durch zufall nichts in den speichert dort geschrieben wurde. (vermute ich zumindest. Ich sehe es als recht schludriges und gefährliches programmieren an etwas zu nutzen was nicht vom Programm alloziert und initiert wurde)
Wenn du eine Bankgrösse ändern willst / musst, ist dafür ResizeBank zu nutzen.

Okay, danke. Also fast wie in C++.

Ich dachte vielleicht würde irgendein Unterprogramm permanent auf die Bankgröße gucken und den Speicher verwaltet. Na dann fühl ich mich doch gleich Zuhause! Razz

Ist eine Bank angehend genauso schnell wie ein normales Array?
 

Dreamora

BeitragSa, Sep 08, 2007 0:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Mehr oder weniger schon, die Unterschiede sind definitiv nicht so gross, dass man sich deswegen sonstwie einschränken muss.

Aber müsstest du für dich selbst rasch benchmarken wenn du genaue werte willst. (wobei array ja für deinen Fall keine Alternativen sind. Da müsstest du dir ne LinkedList basteln und damit vergleichen. Vorteil der Bank ist das kannst du potentiell alles inkl strings speichern. Das würde nicht gehen mit linked list.)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group