problem mit maxgui (maus)

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Mathias-Kwiatkowski

Betreff: problem mit maxgui (maus)

BeitragMi, März 14, 2012 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habe nun ein folgendes problem.

bei mir wird MausX und MausY nicht zurückgeliefert. dabei müsste es gehen... habe nun folgendes mal versucht

orginalcode: der nicht funktioniert
Code: [AUSKLAPPEN]
Case EVENT_MOUSEDOWN
         tmpGadget = TGadget(EventSource())
         If tmpGadget=Canvas
            Print "maus " + MausX + " " + MausY
         EndIf
            
      Case EVENT_MOUSEMOVE
         tmpGadget = TGadget(EventSource())
         If tmpGadget = Canvas
            MausX = EventX ()
            MausY = EventY ()
         EndIf



der code der funktioniert:
Code: [AUSKLAPPEN]
Case EVENT_MOUSEDOWN
         tmpGadget = TGadget(EventSource())
         If tmpGadget=Canvas
                                MausX = EventX ()
            MausY = EventY ()
            Print "maus " + MausX + " " + MausY
         EndIf
            
      Case EVENT_MOUSEMOVE
         tmpGadget = TGadget(EventSource())
         If tmpGadget = Canvas
            MausX = EventX ()
            MausY = EventY ()
         EndIf


kann es sein das EVENT_MOUSEMOVE nicht funktioniert? und wenn warum?
desweiteren wie kann ich den abfragen ob einer im canvas links oder rechts geklickt hat? (so ne frage nebenbei ^^)


hier der gesammte code
Code: [AUSKLAPPEN]
Import maxgui.Drivers

Global Screen:Int[2]
Screen[0] = DesktopWidth() - 150 Screen[1] = DesktopHeight() - 150

Global Map:Int[501, 501]
For x = 0 To 500
   For y = 0 To 100
      Map[x, y] = 1
   Next
Next

Global Cam:Int[2]
Cam[0] = 0 Cam[1] = 0
Global MausX:Int
Global MausY:Int

Global Win_Game:TGadget = CreateWindow("City Live 1.0", DesktopWidth() / 2 - screen[0] / 2, DesktopHeight() / 2 - screen[1] / 2, Screen[0], Screen[1], Null, WINDOW_TITLEBAR | WINDOW_MENU)
Global Canvas:TGadget = CreateCanvas(0, 0, Screen[0] - 350, Screen[1] - 65, Win_Game)
Global Slider:TGadget[2]
Slider[0] = CreateSlider(Screen[0] - 350, 0, 16, GadgetHeight (Canvas) , Win_Game, SLIDER_VERTICAL)
Slider[1] = CreateSlider(0, GadgetHeight (Canvas), GadgetWidth (Canvas), 16, Win_Game, SLIDER_HORIZONTAL)
SetSliderRange(Slider[0], 0, 500)
SetSliderRange(Slider[1], 0, 500)


Global Wiese:TImage = LoadImage("Data\Tiles\Wiese.BMP")


CreateTimer 600


While WaitEvent()
   Local tmpGadget:TGadget
   Select EventID()
      Case EVENT_MOUSEMOVE
         'Print "MOVE!"
         
      Case EVENT_TIMERTICK
         RedrawGadget Canvas
         
      Case EVENT_GADGETPAINT
         SetGraphics CanvasGraphics(Canvas)
         Cls
         For x = Cam[0] To Cam[0] + GadgetWidth(Canvas) / 64
            For y = Cam[1] To Cam[1] + GadgetHeight(Canvas) / 64
               If Map[x, y] = 1 Then DrawImage Wiese, x * 64, y * 64
            Next
         Next
         SetColor 255, 255, 255
         DrawText Fps() + " " + MausX, 0, 0
         
         Flip
         
      Case EVENT_WINDOWCLOSE
         End
      
      Case EVENT_MOUSEDOWN
         tmpGadget = TGadget(EventSource())
         If tmpGadget=Canvas
            Print "maus " + MausX + " " + MausY
         EndIf
            
      Case EVENT_MOUSEMOVE
         tmpGadget = TGadget(EventSource())
         If tmpGadget = Canvas
            MausX = EventX ()
            MausY = EventY ()
         EndIf
         
      Case EVENT_APPTERMINATE
         End
   End Select
Wend



Function Fps:Int()

Global show:Int, counter:Int = MilliSecs(), count:Int
If MilliSecs()-counter >= 1000 Then
counter = MilliSecs()
show = count
count = 0
End If
count :+ 1
Return show

End Function

ZEVS

BeitragMi, März 14, 2012 22:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch wenn ich es unwahrscheinlich finde, aber der Code ist nicht (Super)Strict dadurch kann es sein, dass BlitzMax irgendwo einen Unterschied in den Variablen findet. Zumindest würde mich so ein Ergebnis bei nicht-Strict auch nicht wundern, obwohl ich dergleichen hier nicht entdecken kann. Vielleicht hilft es ja.
Zitat:
desweiteren wie kann ich den abfragen ob einer im canvas links oder rechts geklickt hat?

BlitzMax: [AUSKLAPPEN]
EventData() = MOUSE_LEFT oder MOUSE_RIGHT


ZEVS

PS: DebugLog ist so eine tolle Sache. Man kann sich ausgeben lassen, welcher Code mit welchen Variablen ausgeführt wird. Gleiches gilt für DebugStop.

Propellator

BeitragMi, März 14, 2012 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, bevor ich auf das eigentliche Problem eingehe, hier ein paar Tipps:

  • CreateTimer 600 ist etwas hoch. Nimm 60 FPS, oder so.

  • Rücke den Code richtig ein

  • Versuche wenn möglich Globale zu vermeiden. Gerade Die Globale "Show" in der Funktion "Fps" lässt mich stutzen, normalerweise lässt BlitzMax das definieren von Globalen innerhalb von Funktionen nicht zu.

  • Benutze SuperStrict

Okay, nun zum eigentlichen Problem: Versuche das Canvas mit ActivateGadget zu aktivieren. Ein Mausklick ins Canvas hinein tut übrigens das gleiche.

Beim EVENT_MOUSEDOWN enthält EventData() bzw event.data den Mausbutton-Code. (1 = links, 2 = rechts, 3 = mittlere, etc...)
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.

Mathias-Kwiatkowski

BeitragMi, März 14, 2012 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
debug log meldet nichts ^^

und ich habe dein rat befolgt (superstrict)

hier der code.... aber wie erwartet nich viel unterschied, und gleicher fehler...

Code: [AUSKLAPPEN]
SuperStrict

Import maxgui.Drivers

Global Screen:Int[2]
Screen[0] = DesktopWidth() - 150 Screen[1] = DesktopHeight() - 150

Local x:Int
Local y:Int
Global Map:Int[501, 501]
For x:Int = 0 To 500
   For y:Int = 0 To 100
      Map[x, y] = 1
   Next
Next

Global Cam:Int[2]
Cam[0] = 0 Cam[1] = 0
Global MausX:Int
Global MausY:Int

Global Win_Game:TGadget = CreateWindow("City Live 1.0", DesktopWidth() / 2 - screen[0] / 2, DesktopHeight() / 2 - screen[1] / 2, Screen[0], Screen[1], Null, WINDOW_TITLEBAR | WINDOW_MENU)
Global Canvas:TGadget = CreateCanvas(0, 0, Screen[0] - 350, Screen[1] - 65, Win_Game)
Global Slider:TGadget[2]
Slider[0] = CreateSlider(Screen[0] - 350, 0, 16, GadgetHeight (Canvas) , Win_Game, SLIDER_VERTICAL)
Slider[1] = CreateSlider(0, GadgetHeight (Canvas), GadgetWidth (Canvas), 16, Win_Game, SLIDER_HORIZONTAL)
SetSliderRange(Slider[0], 0, 500)
SetSliderRange(Slider[1], 0, 500)


Global Wiese:TImage = LoadImage("Data\Tiles\Wiese.BMP")


CreateTimer 60

While WaitEvent()
   Local tmpGadget:TGadget
   Select EventID()
      Case EVENT_MOUSEMOVE
         'Print "MOVE!"
         
      Case EVENT_TIMERTICK
         Hauptschleife()
         RedrawGadget Canvas
         
      Case EVENT_GADGETPAINT
         Malen(Canvas)
                  
      Case EVENT_WINDOWCLOSE
         End
      
      Case EVENT_MOUSEDOWN
         tmpGadget = TGadget(EventSource())
         If tmpGadget=Canvas
            Print "maus " + MausX + " " + MausY
         EndIf
            
      Case EVENT_MOUSEMOVE
         tmpGadget = TGadget(EventSource())
         If tmpGadget = Canvas
            MausX = EventX ()
            MausY = EventY ()
         EndIf
         
      Case EVENT_APPTERMINATE
         End
         
      Case EVENT_GADGETACTION

   End Select
Wend


Function Hauptschleife()
   
End Function

Function Malen(TmpGadget:Tgadget)
   Local x:Int
   Local y:Int
   SetGraphics CanvasGraphics(TmpGadget)
   Cls
   For x = Cam[0] To Cam[0] + GadgetWidth(TmpGadget) / 64
      For y = Cam[1] To Cam[1] + GadgetHeight(TmpGadget) / 64
         If Map[x, y] = 1 Then DrawImage Wiese, x * 64, y * 64
      Next
   Next
   SetColor 255, 255, 255
   DrawText Fps() + " " + MausX, 0, 0
   
   Flip
End Function


Function Fps:Int()

Global show:Int, counter:Int = MilliSecs(), count:Int
If MilliSecs()-counter >= 1000 Then
counter = MilliSecs()
show = count
count = 0
End If
count :+ 1
Return show

End Function

Propellator

BeitragMi, März 14, 2012 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast zwei mal ein Case EVENT_MOUSEMOVE. Nur das erste, leere Case wird ausgeführt.
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.

Mathias-Kwiatkowski

BeitragMi, März 14, 2012 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
omg ja danke... viele bäume und doch kein wald oder wie war das?
auf jedenfall danke für eure schnellen hilfen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group