Multidimensionales Array an Funktion übergeben
Übersicht

![]() |
NovaBetreff: Multidimensionales Array an Funktion übergeben |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich möchte ein Array an eine Funktion übergeben, um genau zu sein ein dreidimensionales.
Problem dabei: Ich habe es bisher nicht zum laufen bekommen, egal wie ich die Sachen verändert habe... Hat jemand eine Idee? Ich würde das Array auch gerne per "call by reference" machen, damit das Array nicht immer wieder kopiert wird. Kann mir jemand mal einen Beispielcode zeigen, wie man das umsetzt? Die Fehlermeldung momentan ist auch ziemlich genial: Unable to convert from 'Int Array' to 'Int Array' Code: [AUSKLAPPEN] Local test:Int[5,5,2]
For Local x:Int = 0 To 4 For Local y:Int = 0 To 4 test[x, y, 0] = 0 test[x, y, 1] = 0 Next Next bla (test) WaitKey End Function bla (array:Int[]) For Local x:Int = 0 To 4 For Local y:Int = 0 To 4 Print test[x, y, 0] Print test[x, y, 1] Next Next EndFunction |
||
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dimension reservieren & By Reference:
BlitzMax: [AUSKLAPPEN] Function bla (array:Int[,,] Var) |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Nova |
![]() Antworten mit Zitat ![]() |
---|---|---|
Meine Güte, zu viele Programmiersprachen zu kennen hat auch Nachteile. Ich weiß nicht mehr, welche Regeln zu welcher Sprache gehören... Dumm ist auch, dass die Hilfe von BlitzMax noch ziemlich verbesserungswürdig ist, genau so wie die Fehlermeldungen... Schade, dass es keine Alternativ-Hilfe vom Blitzbasic-Portal dazu gibt.
Ich schreibe hier einfach mal den ganzen Code, wegen dem ich auch die Frage gestellt habe. Fehlermeldung ist: Unhandled Exception:Attempt to index array element beyond array length Code: [AUSKLAPPEN] SuperStrict
Graphics 800, 600, 0 Local karte:Int[64, 64, 2] For Local x:Int = 0 To 63 For Local y:Int = 0 To 63 karte[x, y, 0] = 0 karte[x, y, 1] = 0 Next Next Local bodenflaechen:TImage = LoadAnimImage ("bodenflaeche.png", 64, 64, 0, 0) Repeat zeichneBoden (karte, bodenflaechen) Flip Cls Until KeyHit(KEY_ESCAPE) Function zeichneBoden (karte:Int[,,], bodenflaechen:TImage Var) For Local x:Int = 0 To 63 For Local y:Int = 0 To 63 DrawImage (bodenflaechen, x * 64, y * 64, karte[x, y, 0]) Next Next Return End Function Das Bild dazu: ![]() |
||
- Zuletzt bearbeitet von Nova am So, Jun 10, 2012 17:11, insgesamt 3-mal bearbeitet
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man könnte noch erwähnen, dass selbst ohne den call-by-reference-Ausdruck 'var' das Array an dieser Stelle nicht kopiert wird. Daher verhält es sich so, dass auch wenn du ohne Var-Ausdruck in der Funktion anschließend einer Zelle einen anderen Wert zuweist, diese Veränderung sich auch auf das der Funktion übergebene Array auswirkt. Erst wenn du wirklich anfängst, das Array selbstständig komplett zu ersetzen, solltest du den Var-Ausdruck nutzen müssen.
Edit: Zu deinem hinzueditierten Problem: Sehe dir die Parameter der LoadAnimImage-Funktion an, und überlege dir, ob du wirklich 0 als Anzahl der zu ladenden Einzelbildchen angeben solltest ![]() |
||
![]() |
Nova |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eigentlich stand da auch eine 1, allerdings habe ich diese bei meiner Fehlersuche durch eine 0 ersetzt, da ich mir wohl dachte "Wahrscheinlich zählt BlitzMax bei den Einzelbildern auch bei 0 los, schreibe da doch besser mal eine 0 hin, Nova!"
Endergebnis: Jetzt funktioniert es endlich! ![]() |
||
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group