Dynmische arrays in Types?
Übersicht

![]() |
entresBetreff: Dynmische arrays in Types? |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dreamora hat Folgendes geschrieben: Deine Anwendung stimmt.
Danke für die Antwort.
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. 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! ![]() Ist eine Bank angehend genauso schnell wie ein normales Array? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group