Problem mit Darstellen eines Feldes

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Leroy

Betreff: Problem mit Darstellen eines Feldes

BeitragDo, Aug 16, 2007 4:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
leider habe ich mal wieder ein für mich nicht Lösbares Problem.
Undzwar möchte ich vollgendes:

Ein Objekt wird erstellt, (das ganze 6x) und die x und y Koardienaten gehen jewalls um +10 hoch.
Sollte dann am Ende so ausehen:

X X X X X X
X X X X X X
X X X X X X
X X X X X X
X X X X X X
X X X X X X


Hier mein Code dazu:

Code: [AUSKLAPPEN]
     Graphics 800, 600, 0
     
      Type zobjekt
       Global zlist:TList = New TList
      Field zobjekt_x
      Field zobjekt_Y
     EndType
         
        For i2 = 0 To 6
         info:zobjekt = New zobjekt
            info.zobjekt_x = 20 + vari
            info.zobjekt_Y = 20 + vari2
            ListAddLast zobjekt.zlist, info
         vari = vari + 10
         vari2 = vari2 + 10
      Next
                 
     Repeat
     Flip
     Cls
     
      For i:zobjekt = EachIn zobjekt.zlist
      DrawRect info.zobjekt_x, info.zobjekt_Y, 10, 10
       Next
                 
     Until KeyHit(KEY_ESCAPE)
     End


Leider wird mir immer nur das letzte Feld angezeigt Rolling Eyes
I need help pls ^^

Mfg.
Leroy
 

Dreamora

BeitragDo, Aug 16, 2007 9:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast da ein Variablen Scope Problem.

Ohne Strict / SuperStrict wirst du häufig in solche Probleme rennen fürchte ich
Am besten gewöhnst du dir SuperStrict an, damit du Typendeklarationen nicht vergisst.


Das hier sollte gehen:

Code: [AUSKLAPPEN]

SuperStrict
Graphics 800, 600, 0
     
Type zobjekt
  Global zlist:TList = New TList
  field _link:TLink
  Field x    ' wozu das zobject_? es ist schon im type zobject drin
  Field y

  Method New()
    _link = zlist.addlast(self)
  end method

  ' Zerstört das Objekt soferns nur in dieser Liste ist
  ' TLink.remove() ist beträchtlich schneller als TList.remove()
  '   welches durch die ganze liste muss
  method destroy()
    _link.remove()
    _link = null
  end method

  Function drawObjects()
    for local t:zobject = eachin zlist
      DrawRect t.x, t.y, 10, 10
    next
  end function
EndType

' deine Zählerstruktur war falsch
For local i:int= 0 To 5
  for local j:int = 0 to 5
    local info:zobjekt = New zobjekt
    info.x = 20 + i*10
    info.y = 20 + j*10 ' das gleiche wie deine Zählerstruktur, bei 2D brauchst du i und j als zählervars
  next
Next
                 
Repeat
  Cls

  zobject.drawObjects()

  flip           
Until KeyHit(KEY_ESCAPE)
End
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

klepto2

BeitragDo, Aug 16, 2007 12:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Abgesehen davon, das Dreamora recht hat und du wirklich auf SuperStrict umsteigen solltest. Dazu etwas strukturierter programmieren wäre auch nicht verkehrt.

In deinem Code gibt es einen ganz entscheidenden Fehler. In deiner 'Draw' Schleife verwendest du i:zobject
wobei du innerhalb der schleife aber info:zobject verwendest. dieses 'info' wurde aber in der erstellungs schleife deklariert und definiert. Somit zeichnest du in deiner letzten Schleife nur das letzte zobjekt.

damit dein code funktioniert (Dreamoras Code wäre allerdings die sauberere Lösung):

Code: [AUSKLAPPEN]

For i:zobjekt = EachIn zobjekt.zlist
      DrawRect i.zobjekt_x, i.zobjekt_Y, 10, 10
Next
Matrix Screensaver
Console Modul für BlitzMax
KLPacker Modul für BlitzMax

HomePage : http://www.brsoftware.de.vu

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group