Listenproblem

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Oliver B

Betreff: Listenproblem

BeitragDi, Mai 13, 2008 23:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen, ich habe mit Types und Listen ein kleines Problem.

Mein kleines Programm soll auf Tastendruck der linken maustaste an der jeweiligen Stelle einen Kreis zeichnen.

Nur meckert der Compiler immer "Identifier 'PunkteListe' not found

Ich hab schon alles mögliche versucht, nur komme ich auf keine Lösung.
Irgendeine Idee wo mein Fehler liegt?


Code: [AUSKLAPPEN]

Strict
Global flagml = 0

Type PunktType
  Field X#, Y# ' Koordinaten der Punkte
  Field Size = 25 'Größe der Kreise
  Global PunkteListe: TList
  Method Draw () DrawOval(X-Size/2, Y-Size/2, Size, Size) End Method

  Function Erstellen () 'Erstellen eines neuen Kreises in die Liste
     Local NewPunkt:PunktType
     NewPunkt = New PunktType
     NewPunkt.X = MouseX() ;NewPunkt.Y = MouseY()
     If Not PunkteListe Then PunkteListe = CreateList()
     ListAddLast (PunkteListe, NewPunkt)
  EndFunction
End Type

Graphics 800,600


While Not KeyDown(Key_Escape)

   If MouseDown(1) = 1 Then ' Maustaste drücken
     If flagml=0 Then
      PunktType.Erstellen ()
     flagml=1
     EndIf
   EndIf
   If MouseDown(1) = 0 ' keine Maus gedrückt
     flagml = 0
   EndIf


  For Local Punkt:PunktType = EachIn PunkteListe
    Punkt.Draw ()
   DrawText "Anzahl der Punkte : "+List.Count(), 20, 20
   DrawText "Press ESC to exit", 20, 40
  Next
Flip ;Cls
Wend

mahe

BeitragDi, Mai 13, 2008 23:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
For Local Punkt:PunktType = EachIn PunkteListe

sollte so aussehen:
Zitat:
For Local Punkt:PunktType = EachIn PunktType.PunkteListe
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ,
 

Oliver B

BeitragDi, Mai 13, 2008 23:46
Antworten mit Zitat
Benutzer-Profile anzeigen
mahe hat Folgendes geschrieben:
Zitat:
For Local Punkt:PunktType = EachIn PunkteListe

sollte so aussehen:
Zitat:
For Local Punkt:PunktType = EachIn PunktType.PunkteListe


das läuft leider auch nicht.
Immer noch Compile Error "Identifier 'List' not found

ich habe mich bei der Erstellung meines Programmes ziemlich nahe an
http://www.truplo.com/blitzmax...ave11.html gehalten

mahe

BeitragMi, Mai 14, 2008 0:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach, das war erst der erste Fehler.
Hier der nächste (und letzte!):

Schreib:
Zitat:
DrawText "Anzahl der Punkte : "+PunktType.PunkteListe.Count(), 20, 20

statt:
Zitat:
DrawText "Anzahl der Punkte : "+List.Count(), 20, 20



Das Anlegen und befüllen der Liste funktioniert zwar mit Deiner Variante, ist aber so viel hübscher:
Zitat:
If Not PunkteListe Then PunkteListe = New TList
PunkteListe.AddLast(NewPunkt)
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ,

Moep

BeitragMi, Mai 14, 2008 1:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Und das hier noch :

Code: [AUSKLAPPEN]
For Local Punkt:PunktType = EachIn PunkteListe
     Punkt.Draw ()
     DrawText "Anzahl der Punkte : "+PunktType.PunkteListe.Count(), 20, 20
     DrawText "Press ESC to exit", 20, 40
Next


Drawtext hat nix in der For-Schleife zu suchen. Sonst malst du für jeden Punkt in deiner den Text an die gleiche Position...das bringt recht wenig Wink

Code: [AUSKLAPPEN]
For Local Punkt:PunktType = EachIn PunkteListe
     Punkt.Draw ()
Next
DrawText "Anzahl der Punkte : "+PunktType.PunkteListe.Count(), 20, 20
DrawText "Press ESC to exit", 20, 40


mfg
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42

Achtung: Suchtgefahr!
moep123.ohost.de
 

Oliver B

BeitragMi, Mai 14, 2008 8:59
Antworten mit Zitat
Benutzer-Profile anzeigen
mahe hat Folgendes geschrieben:
Ach, das war erst der erste Fehler.
Hier der nächste (und letzte!):

Schreib:
Zitat:
DrawText "Anzahl der Punkte : "+PunktType.PunkteListe.Count(), 20, 20

statt:
Zitat:
DrawText "Anzahl der Punkte : "+List.Count(), 20, 20



Das Anlegen und befüllen der Liste funktioniert zwar mit Deiner Variante, ist aber so viel hübscher:
Zitat:
If Not PunkteListe Then PunkteListe = New TList
PunkteListe.AddLast(NewPunkt)


Leider hab ich jetzt "Unhandel Exception: Attempt to access field or method of Null object"
Deine hübschere Variante zum befüllen der Liste ist irgendwie in den untiefen des Forums verloren gegangen.

Ach ja, das Tutorial von dem ich gelernt hatte (siehe Link oben), funktioniert auch nicht. Ist es vielleicht so alt, dass es mit der aktuellen Version von Blitzmax nicht mehr funktioniert?


Zitat:
Drawtext hat nix in der For-Schleife zu suchen. Sonst malst du für jeden Punkt in deiner den Text an die gleiche Position...das bringt recht wenig


Stimmt, ist irgendwie doppelt gemoppelt.

d-bug

BeitragMi, Mai 14, 2008 9:28
Antworten mit Zitat
Benutzer-Profile anzeigen
So wie ich das sehe solltest du die Liste lieber schon mal erstellen, bevor du die Maustaste abfragst, denn so schnell kannst du gar nicht drücken, wie das erste mal die Liste abgefragt werden soll.

Du kannst allerdings auch erst mal prüfen ob die Liste existiert, bevor du sie abfragst:
Code: [AUSKLAPPEN]

If PunktType.PunktListe
   For Local Punkt:PunktType = EachIn PunktType.PunkteListe
      Punkt.Draw ()
   Next
   DrawText "Anzahl der Punkte : "+PunktType.PunkteListe.Count(), 20, 20
EndIf
DrawText "Press ESC to exit", 20, 40
 

Oliver B

BeitragMi, Mai 14, 2008 9:41
Antworten mit Zitat
Benutzer-Profile anzeigen
d-bug hat Folgendes geschrieben:
So wie ich das sehe solltest du die Liste lieber schon mal erstellen, bevor du die Maustaste abfragst, denn so schnell kannst du gar nicht drücken, wie das erste mal die Liste abgefragt werden soll.


Hm, stimmt, wenn ich die Liste vorher erstelle Funtioniert das Programm... seltsam

Hier das funktionierende Programm

Code: [AUSKLAPPEN]
Strict
Global flagml = 0

Type PunktType
  Field X#, Y# ' Koordinaten der Punkte
  Field Size = 25 'Größe der Kreise
  Global PunkteListe: TList = CreateList()

  Method Draw () DrawOval(X-Size/2, Y-Size/2, Size, Size) End Method
 
  Function Erstellen () 'Erstellen eines neuen Kreises in die Liste
     Local NewPunkt:PunktType
     NewPunkt = New PunktType
     NewPunkt.X = MouseX() ;NewPunkt.Y = MouseY()
     ListAddLast (PunkteListe, NewPunkt)
  EndFunction

End Type

Graphics 800,600


While Not KeyDown(Key_Escape)

   If MouseDown(1) = 1 Then ' Maustaste drücken
     If flagml=0 Then
      PunktType.Erstellen ()
     flagml=1
     EndIf
   EndIf
   If MouseDown(1) = 0 ' keine Maus gedrückt
     flagml = 0
   EndIf

  For Local Punkt:PunktType = EachIn PunktType.PunkteListe
    Punkt.Draw ()
  Next
  DrawText "Anzahl der Punkte : "+PunktType.PunkteListe.Count(), 20, 20
Flip ;Cls
Wend


Danke euch für die Hilfe.

BlitzMoritz

BeitragMi, Mai 14, 2008 9:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Seltsam? d-bug hat's doch erklärt:
Bevor irgendwelche Benutzerinputs möglich wären, würden bereits einige Durchgänge deiner While-Schleife stattgefunden haben. Und sobald die Schleife einmal komplett durchläuft, wird auch nach deiner Liste gefragt ("EachIn PunktType.PunkteListe "). Und die gäb's dann noch nicht....
 

Oliver B

BeitragMi, Mai 14, 2008 11:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, jetzt hab ich es kapiert.
Danke nochmal an alle für die schnelle Hilfe

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group