[BlitzMax] Fehler bei Zugriff auf Array

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Skabus

Betreff: [BlitzMax] Fehler bei Zugriff auf Array

BeitragDi, Sep 15, 2009 13:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich sitz jetzt schon eine geschlagene Stunde an einem Problem, welches meiner Meinung nach keinen Sinn ergibt...

Problemfunktion ist folgende:

BlitzMax: [AUSKLAPPEN]

'der Charakterhandler verwaltet alle Figuren auf dem Schlachtfeld und zeigt ihre
'Grafiken dementsprechend an
Method CharaHandler()

'lokale Variablen
Local SORT:Int = True
Local zwischen:Int
Local zwischen2:Int
Local zwischen3:Int
Local zwischen4:Int
Local zwischen5:Int
Local zwischen6:Int
Local zwischen7:Int
Local zwischen8:Int
Local e:Int = 0
Local c:Int = 0
Local curImage:TImage

'zuerst werden alle Figuren in den order-Array gespeichert

If(battleParty[0,0] <> -1) Then order[c,0] = 666;order[c,1] = battleParty[0,2];c:+1;order[c,2] = battleParty[0,2];order[c,3] = battleParty[0,3]
If(battleParty[1,0] <> -1) Then order[c,0] = 13;order[c,1] = battleParty[1,2];c:+1;order[c,2] = battleParty[1,2];order[c,3] = battleParty[1,3]
If(battleParty[2,0] <> -1) Then order[c,0] = 11;order[c,1] = battleParty[2,2];c:+1;order[c,2] = battleParty[2,2];order[c,3] = battleParty[2,3]
If(battleParty[3,0] <> -1) Then order[c,0] = 8;order[c,1] = battleParty[3,2];c:+1;order[c,2] = battleParty[3,2];order[c,3] = battleParty[3,3]
If(battleParty[4,0] <> -1) Then order[c,0] = battleParty[4,0];order[c,1] = battleParty[4,2];c:+1;order[c,2] = battleParty[4,2];order[c,3] = battleParty[4,3]

If(player.HASWARPTOOL = True) Then

If(battleParty[5,0] <> -1) Then order[c,0] = battleParty[5,0];order[c,1] = battleParty[5,2];c:+1;order[c,2] = battleParty[5,2];order[c,3] = battleParty[5,3]
If(battleParty[6,0] <> -1) Then order[c,0] = battleParty[6,0];order[c,1] = battleParty[6,2];c:+1;order[c,2] = battleParty[6,2];order[c,3] = battleParty[6,3]
If(battleParty[7,0] <> -1) Then order[c,0] = battleParty[7,0];order[c,1] = battleParty[7,2];c:+1;order[c,2] = battleParty[7,2];order[c,3] = battleParty[7,3]
If(battleParty[8,0] <> -1) Then order[c,0] = battleParty[8,0];order[c,1] = battleParty[8,2];c:+1;order[c,2] = battleParty[8,2];order[c,3] = battleParty[8,3]

EndIf

If(enemyParty[0,0] <> -1) Then order[c,0] = enemyParty[0,0];order[c,1] = enemyParty[0,2];c:+1;order[c,2] = enemyParty[0,2];order[c,3] = enemyParty[0,3]
If(enemyParty[1,0] <> -1) Then order[c,0] = enemyParty[1,0];order[c,1] = enemyParty[1,2];c:+1;order[c,2] = enemyParty[1,2];order[c,3] = enemyParty[1,3]
If(enemyParty[2,0] <> -1) Then order[c,0] = enemyParty[2,0];order[c,1] = enemyParty[2,2];c:+1;order[c,2] = enemyParty[2,2];order[c,3] = enemyParty[2,3]
If(enemyParty[3,0] <> -1) Then order[c,0] = enemyParty[3,0];order[c,1] = enemyParty[3,2];c:+1;order[c,2] = enemyParty[3,2];order[c,3] = enemyParty[3,3]
If(enemyParty[4,0] <> -1) Then order[c,0] = enemyParty[4,0];order[c,1] = enemyParty[4,2];c:+1;order[c,2] = enemyParty[4,2];order[c,3] = enemyParty[4,3]
If(enemyParty[5,0] <> -1) Then order[c,0] = enemyParty[5,0];order[c,1] = enemyParty[5,2];c:+1;order[c,2] = enemyParty[5,2];order[c,3] = enemyParty[5,3]
If(enemyParty[6,0] <> -1) Then order[c,0] = enemyParty[6,0];order[c,1] = enemyParty[6,2];c:+1;order[c,2] = enemyParty[6,2];order[c,3] = enemyParty[6,3]
If(enemyParty[7,0] <> -1) Then order[c,0] = enemyParty[7,0];order[c,1] = enemyParty[7,2];c:+1;order[c,2] = enemyParty[7,2];order[c,3] = enemyParty[7,3]
If(enemyParty[8,0] <> -1) Then order[c,0] = enemyParty[8,0];order[c,1] = enemyParty[8,2];c:+1;order[c,2] = enemyParty[8,2];order[c,3] = enemyParty[8,3]


'RuntimeError()



'nun werden alle Figuren auf dem Schlachtfeld nach dem Y-Wert geordnet
While(SORT = True)

SORT = False

'nun werden diese Werte aufsteigend sortiert
For e = 0 To c

'SORT wird False gesetzt, sollte es zwischendurch
'True gesetzt werden geht das sortieren weiter

If(e+1 < c+1)

If(order[e,1] > order[e+1,1])

zwischen = order[e,0]
zwischen2 = order[e,1]
zwischen3 = order[e,2]
zwischen4 = order[e,3]
zwischen5 = order[e+1,0]
zwischen6 = order[e+1,1]
zwischen7 = order[e+1,2]
zwischen8 = order[e+1,3]


order[e+1,0] = zwischen
order[e+1,1] = zwischen2
order[e+1,2] = zwischen3
order[e+1,3] = zwischen4
order[e,0] = zwischen5
order[e,1] = zwischen6
order[e,2] = zwischen7
order[e,3] = zwischen8


SORT = True;

EndIf
EndIf
Next
Wend

'nachdem nun alle Figuren geordnet wurden, werden sie entsprechend ihrer Position angezeigt
For e = 0 To c-1
curImage = getCharImage(order[e,0])
If(curImage = Null) Then RuntimeError("Error@CharaHandler(): Wrong CharID!ID: " + String(order[e,0]))
DrawImage curImage,order[e,2]*TILE_SIZE,order[e,1]*TILE_SIZE,order[e,3]
Next

End Method


Die Funktion funktioniert folgendermaßen.battleParty enthält ID, x,y und frame der eigenen Charaktere auf dem Spielfeld.enemyParty enthält ID, x,y und frame der Gegner auf dem Spielfeld.
Ich hab battleParty und enemyParty mit den entsprechenden Werten gefüllt und nun möchte ich gerne alle spielecharaktere UND Gegner zusammen in den Array "order" packen, damit ich sie per bubbleSort
nach y-Wert sortieren kann.

Das funktioniert alles ohne Probleme, allerdings kommt es an dieser Stelle zu einem Fehler:

DrawImage curImage,order[e,2]*TILE_SIZE,order[e,1]*TILE_SIZE,order[e,3]

da bekomme ich folgende Fehlermeldung:

Unhandled Exeption: Attempt to index array element beyond array lenght

Die konkrete Stelle an dem der Fehler auftritt habe ich auch bereits durch testen herausgefunden.
Es ist order[e,3], allerdings macht das keinen Sinn da ich order bereits global(das heißt als Membervariable des type´s in den sich diese Methode befindet) definiert.Hier:

Field order:Int[18,4]

Somit habe ich doch die Indizes 0,1,2 und 3. Außerdem wird auf die 4. Stelle des arrays überall
zugegriffen OHNE Fehlermeldung.Nur bei dem DrawImage-Befehl sagt er mir dass der Index
größer ist als die Maximallänge des Arrays.

Achso nochwas zum Verständnis: getCharImage(order[e,0]) sucht anhand dert ID die an der Stelle 0 gespeichert ist, nach dem Bild des Gegners oder des Charakters.Rückgabewert ist natürlich TImage.

Das ergibt für mich keinen Sinn.Bissher hab ich noch keine Lösung gefunden.

Ich würd mich wirklich freuen, wenn ihr mir helfen könntet. Very Happy

Danke schonmal im vorraus!

MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

DaysShadow

BeitragDi, Sep 15, 2009 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Sicher das order[e, 3] nicht eine Zahl enthält die größer ist als die Anzahl der Frames des Bildes?
Gibt dann nämlich auch einen Attempt to index array....usw. Fehler, habs gerade getestet.

MfG DaysShadow
Blessed is the mind too small for doubt

Skabus

BeitragDi, Sep 15, 2009 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
DaysShadow hat Folgendes geschrieben:
Sicher das order[e, 3] nicht eine Zahl enthält die größer ist als die Anzahl der Frames des Bildes?
Gibt dann nämlich auch einen Attempt to index array....usw. Fehler, habs gerade getestet.

MfG DaysShadow


ja darauf bin ich auch schon gekommen, allerdings hat der Debug ergeben dass explizit an der Stelle
order[0,3] der Wert 0 ist...

Daher kanns das nicht sein... Sad

MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

Xeres

Moderator

BeitragDi, Sep 15, 2009 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du das Bild / die Bilder geladen oder zur Laufzeit irgendwo erstellt?
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)

Skabus

BeitragDi, Sep 15, 2009 14:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres hat Folgendes geschrieben:
Hast du das Bild / die Bilder geladen oder zur Laufzeit irgendwo erstellt?


ja sie wurden alle zu Beginn des Programms geladen worden.Das es Bilder mit mehreren Frames sind, hatte ich noch vergessen zu erwähnen.


MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group