Probleme mit Type einträge zu ändern? [Gelöst]

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

bruce85

Betreff: Probleme mit Type einträge zu ändern? [Gelöst]

BeitragFr, Jul 04, 2008 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich habe mit Types Merk Felder erstellt für meine Karte und wird auch alles gut angezeigt, jetzt möchte ich einen eintrag gerne ändern, das funktioniert irgendwie nicht.

Hier die Type Felder:
Code: [AUSKLAPPEN]
Type MerkFelder
  Field merk_x:Float
  Field merk_y:Float
  Field feld_x:Float
  Field feld_y:Float
  Field fallen:Int
  Field jump:Float
  Field speed:Float
  Field richtung:Int
  Field loeschen:Int
  Field merk_frames:Int
  Field alphawert:Float=1.0
  Global List:TList = New TList
End Type
Global Info:MerkFelder


und hier möchte ich gerne von die Felder den Wert ändern:
Code: [AUSKLAPPEN]
For Info:MerkFelder = EachIn MerkFelder.List
  If Info.fallen = 0 Then
    If Not map[Info.feld_x+1,Info.feld_y] = Info.merk_frames Then
      If Not map[Info.feld_x,Info.feld_y+1] = Info.merk_frames Then
        If Not map[Info.feld_x-1,Info.feld_y] = Info.merk_frames Then
          If Not map[Info.feld_x,Info.feld_y-1] = Info.merk_frames Then
            Info.fallen = 1
            Info.jump = Rnd(2,6)
            Info.richtung = Rnd(1,2)
            Info.Speed = Rnd(1,3)
          EndIf
        EndIf
      EndIf
    EndIf
  EndIf
  If Info.merk_y >= 800 Then ListRemove MerkFelder.List, Info
Next


und hier ist die Schleife, in dem alles gezeichnen wird:
Code: [AUSKLAPPEN]
For Info:MerkFelder = EachIn MerkFelder.List
  If Info.fallen = 0 Then
    'Color 0,0,128
    'Oval M\merk_x,M\merk_y,20,20,1
    'DrawImage kugel_feld_png,Info.merk_x,Info.merk_y,Info.merk_frames
  EndIf
  If Info.fallen = 1 Then
    If Info.alphawert > 0 Then Info.alphawert :- .010
    SetAlpha(Info.alphawert)
    DrawImage kugel_feld_png,Info.merk_x,Info.merk_y,Info.merk_frames
    Info.jump = Info.jump -0.20
    Info.merk_y = Info.merk_y - Info.jump

    If Info.richtung = 1 Then
      Info.merk_x = Info.merk_x - Info.speed
    EndIf
    If Info.richtung = 2 Then
      Info.merk_x = Info.merk_x + Info.speed
    EndIf
  EndIf
Next


Der 2te Code abschnitt ist bei mir in einer Function drin, diese habe ich beim Posten entfernt, weil ich nur das wichtigste posten wollte und das 3te Codestück in der Hauptschleife meines Spiels.

Jetzt zu meinem Problem:
Bei dem 2ten Code abschnitt funktioniert der Wert änderung nicht, Info.fallen ist immer auf 0 obwohl es auf 1 geändert werden sollte.

Muss ich vieleicht die Liste in denen die Type einträge verlinkt sind, aktualisieren?

Ich bedanke mich schonmal im Voraus.

MfG
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250
  • Zuletzt bearbeitet von bruce85 am Fr, Jul 04, 2008 23:05, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragFr, Jul 04, 2008 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du schon mal überprüft, ob alle deine If not Abfragen überhaupt zutreffen? Womöglich hat sich vorher ein Denkfehler eingeschlichen. Mit DebugStop oder simpler Print("Code wird ausgeführt") würde ich versuchen was rauszufinden.
Aktuallisieren musst man die Typeliste gewiss nicht.
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)
 

bruce85

BeitragFr, Jul 04, 2008 22:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso, das stimmt, ich dachte wohl das es was damit zu tun hatte mit dem aktualisieren.

Und nein, die If abfragen treffen nicht zu, ich habe mein Spiel erst in BlitzBasic geschrieben gehabt und habe den Code dann für BlitzMax umgeschrieben, bei BlitzBasic funktionierte es einwandfrei, vll habe ich noch was vergessen gehabt in BlitzMax.

Ich werde mal den Code nochmal stück für stück durchgehen, es kann sein das es ein kleiner denkfehler von mir ist.

Edit: Ich habe es anders gelöst und zwar, habe ich bei den If abfragen noch ElseIf angefügt und lasse die werte dann bei Else übergeben.

Code: [AUSKLAPPEN]
For Info:MerkFelder = EachIn MerkFelder.List
  If Info.fallen = 0 Then
    If map[Info.feld_x+1,Info.feld_y] = Info.merk_frames Then
      'Inhalt entfernt...
    ElseIf map[Info.feld_x,Info.feld_y+1] = Info.merk_frames Then
      'Inhalt entfernt...
    ElseIf map[Info.feld_x-1,Info.feld_y] = Info.merk_frames Then
      'Inhalt entfernt...
    ElseIf map[Info.feld_x,Info.feld_y-1] = Info.merk_frames Then
      'Inhalt entfernt...
    Else
      Info.fallen = 1
      Info.jump = Rand(2,6)
      Info.richtung = Rand(1,2)
      Info.Speed = Rand(1,3)
    EndIf
  EndIf
  If Info.merk_y >= 800 Then ListRemove MerkFelder.List, Info
Next


Funktioniert bestens.

Und vielen Dank für deine antwort.

MfG
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group