Array lässt sich nicht übergeben?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

M0rgenstern

Betreff: Array lässt sich nicht übergeben?

BeitragSa, Aug 28, 2010 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute.

Ich hab hier ein Stück Code, das mir zu schaffen macht.
Gleich im voraus: Es geht um den Beitrag zum BCC, wenn ihr mir also nicht helfen wollt, dann versteh ich das.

Problem ist folgendes:
Der Spieler hat zwei Arrays. Ein Array in dem die Waffen gespeichert sind und ein Array in dem seine Munitionstypen mit Anzahl gespeichert sind.
Jetzt übergebe ich den Spieler an eine Funktion der Klasse TWaffe.
In dieser Funktion frage ich dann das komplette Array der Munition des Spielers ab und bekomme an dieser Stelle jedesmal (schon im ersten durchlauf) die Meldung, dass ich mich außerhalb des Array Bereiches bewege (Array Index out of Bounds.....).

Hier mal der Code des Arrays:
BlitzMax: [AUSKLAPPEN]
player.tmammunitation = New tammo[tplayer.imaxweapons]
Player.tmAmmunitation[0] = TAmmo.Create(999, 1) '9mm Munition
Player.tmAmmunitation[1] = TAmmo.Create(20,2) 'MP
Player.tmAmmunitation[2] = TAmmo.Create(10,3) ' Magnum


Hier wird der komplette Spieler übergeben (Methode von TPlayer):
BlitzMax: [AUSKLAPPEN]
If KeyDown(Key_Space) Then
twchosenweapon.shot(Self, idirection)
EndIf


Und hier ist die Funktion von TWaffe:
BlitzMax: [AUSKLAPPEN]
Method Shot(pPlayer:TPlayer, pDirection:Int)
If bammoloaded > 0 Then
If (iCadenc + ilastshoot) < MilliSecs() Then
TShoot.Create(pplayer.fxpos, pplayer.fypos, pDirection, ibulletspeed, fStrength)
bammoloaded:-1
ilastshoot = MilliSecs()
EndIf
Else
If bIsReloading = 0 Then
Local iFound:Int = -1
For Local i:Int = 0 Until 3
If ifound = -1 Then
DebugLog i
If pplayer.tmAmmunitation[i].bKind = bAmmoKind Then
If pplayer.tmAmmunitation[i].iAmount > 0 Then
ifound = i
DebugLog "Found"
EndIf
EndIf
EndIf
Next
If ifound <> -1 Then
pplayer.tmammunitation[ifound].iAmount:-1
DebugLog "Reloading"
bIsReloading = 1
ireloadstart = MilliSecs()
EndIf
EndIf
EndIf


Wobei das Problem an folgender Stelle angezeigt wird:
BlitzMax: [AUSKLAPPEN]
DebugLog i
If pplayer.tmAmmunitation[i].bKind = bAmmoKind Then 'GENAU HIER diese Zeile wird markiert!
If pplayer.tmAmmunitation[i].iAmount > 0 Then
ifound = i
DebugLog "Found"
EndIf
EndIf


Darf ich das ganze so nicht übergeben oder hab ich irgendwas anderes falsch gemacht?
Ich habs schon, wie man sieht, mit debuglog überprüft und bin zu folgendem Ergebnis bekommen: Das passiert schon beim ersten Schleifendurchlauf, also wenn i = 0 ist.

Wäre super, wenn jemand wüsste was ich falsch mache.

Lg, M0rgenstern

DaysShadow

BeitragSa, Aug 28, 2010 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich sehe hier im Code keinen Fehler, überprüfe mal deine TAmmo.Create Funktion ob sie auch was Returned...das wäre der für mich einzig ersichtliche Fehler, zwar den Platz reservieren aber halt nicht belegen.

Die Übergabe des Players in der Shot-Methode hat ja nichts direkt mit dem Array zu tun bzw. übergibst du das ja nicht direkt.

Ansonsten, Problem isolieren oder einfachen vom Sinn her gleichen Code extra schaffen damit du evtl da den Fehler siehst.

MfG DaysShadow
Blessed is the mind too small for doubt
  • Zuletzt bearbeitet von DaysShadow am Sa, Aug 28, 2010 19:31, insgesamt einmal bearbeitet

mpmxyz

BeitragSa, Aug 28, 2010 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie groß ist das Array denn?
Wenn es 0 Einträge hat, würde ich noch einmal genau prüfen, ob die Initialisierung des Spielers wirklich richtig ausgeführt wurde.
Sonst kann ich dir nur das übliche empfehlen: DebugLog, DebugLog, DebugLog und DebugStop...
mfG
mpmxyz
P.S.: Ammunitation? Was ist das? Wink
Edit: "ammunition" ist das richtige Wort.
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
  • Zuletzt bearbeitet von mpmxyz am Sa, Aug 28, 2010 19:53, insgesamt einmal bearbeitet

M0rgenstern

BeitragSa, Aug 28, 2010 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
@ DaysShadow: Vielen Dank. Das wars. Return in der Create Funktion für Ammo vergessen.
Arg, das ist ärgerlich. Da sucht man ja nicht.

@mpmxyz.... *hust* Munition? Embarassed

Lg, M0rgenstern

DaysShadow

BeitragSa, Aug 28, 2010 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Kenn ich, kenn ich Wink
Ewiglanges "Bugsuchen" für son Mist Mr. Green
Blessed is the mind too small for doubt

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group