Multidimensionales Array an Funktion übergeben

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Nova

Betreff: Multidimensionales Array an Funktion übergeben

BeitragSo, Jun 10, 2012 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Xeres

Moderator

BeitragSo, Jun 10, 2012 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Nova

BeitragSo, Jun 10, 2012 16:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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: user posted image
  • Zuletzt bearbeitet von Nova am So, Jun 10, 2012 17:11, insgesamt 3-mal bearbeitet

Lobby

BeitragSo, Jun 10, 2012 17:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink (intern greifst du so nämlich in brl.max2d beim DrawImage-Befehl auf einen Bereich außerhalb eines Arrays zu).

Nova

BeitragSo, Jun 10, 2012 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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! Very Happy
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group