Einige Fragen...

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

juse4pro

Betreff: Einige Fragen...

BeitragDi, Feb 17, 2009 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich habe einige Fragen zu BlitzMax, da ich Umsteiger bin:
1. Wie kann ich einen Array der so kreiert wurde: Global ar:Short[1, 1, 1]... so verändern, dass er SPÄTER mehr fassen kann laos z.B. 32 x 32 x 3 Felder hat. In Blitz3D ging das, indem man nochmal Dim einsetzte.

2. Warum muss ich bei ReadString die Länge des String's angeben, die Funktion ist doch dafür da , das man das auch nicht wissen muss.

3. Was bedeutet die Fehlermeldung: "Attempt to index array element beyond array length." verständlich ausgedrückt?


Wäre nett wenn ihr mir diese Fragen beantowrten könntet, da ich sonst explodiere vor Koffein. Very Happy Shocked

G... G... Gr.... Gruß, Mortus
Portfolio |LinkedIn |XING

Xeres

Moderator

BeitragDi, Feb 17, 2009 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
1.Code: [AUSKLAPPEN]
ar = new Short[x, y, z]

3. Du Versuchst auf ein Feld zuzugreifen, das nicht innerhalb des Arrays liegt.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Artemis

BeitragDi, Feb 17, 2009 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
1. https://www.blitzforum.de/foru...hp?t=17682 Da steht im ersten Beitrag unter "Array of Array anstatt mehrdimensionale Arrays" was

2. BlitzMax speichert nicht mehr die Länge des String, weshalb du das selber machen musst. Zwei einfache Funktionen, die das für dich übernehmen sehen so aus:
Code: [AUSKLAPPEN]
Function WriteStringClassic(stream:TStream, txt:String)
   stream.WriteInt(txt.Length)
   stream.WriteString(txt)
End Function
Function ReadStringClassic:String(stream:TStream)
   Return stream.ReadString(stream.ReadInt())
End Function


3. Das heißt, dass du auf ein Array-Element zugreifen willst, welches nicht existiert, also Beispielsweise Array[4], wenn das Array nur 2 Elemente hat.
 

Ava

Gast

BeitragDi, Feb 17, 2009 23:16
Antworten mit Zitat
Zu Punkt 3 ist natürlich noch anzumerken, dass ein Array [ 32 ] keinen Indexbereich von [ 1 .. 32 ] sondern einen Indexbereich von [ 0 .. 31 ] besitzt.

Im Weiteren ist erwähnenswert, dass der Inhalt eines mehrdimensionalen Arrays bei einem Resize verloren geht. Dieses Problem kann mit einem Array of Array umgangen werden ( also anstatt Array [ 32, 32 ] ein Array [ 32 ] [ 32 ] ). Veränderst Du die Grösse eines Arrays mit Hilfe von New ( also bspw. Array = New Array [ 32 ] ), dann geht der Inhalt auf jeden Fall verloren. Möchte man den Inhalt eines Arrays erhalten ( ohne dieses umständlich zu sichern und wieder zu füllen ), empfiehlt es sich, die Grösse des Arrays wie folgt zu verändern: Array = Array [ .. 64 ], so erhält dieses Array eine neue Grösse von 64 Feldern, oder Array = Array [ 16 .. ], hierbei wird das Array verkleinert, indem die ersten 16 Felder "weggeschnitten" werden. Es kann auch ein bestimmter Bereich ausgeschnitten werden: Array = Array [ 16 .. 24 ], usw.

Bei einem Array of Array ist es ggf. notwendig, jedes Array im Array einzeln zu bearbeiten. Es ist also einiges an Schleifen-Aufwand hierzu erforderlich. ^^

juse4pro

BeitragMi, Feb 18, 2009 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, danke...

aber nochmal zu 3.:
mir ist egal ob das feld verloren geht, ich möchte einfach nur die größe ändern (für ne neue map)

wie geht das?
oder hab ich da was nicht geschnallt? Wink
Portfolio |LinkedIn |XING

D2006

Administrator

BeitragMi, Feb 18, 2009 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Das war aber Problem 1. Und das hat dir, mit deiner Vorgabe, Xeres schon korrekt beantwortet.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

juse4pro

BeitragMi, Feb 18, 2009 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
ups, simmt ja...

böses Koffein Wink
Portfolio |LinkedIn |XING

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group