Prüfen in welchem Canvas die Maus ist?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

M0rgenstern

Betreff: Prüfen in welchem Canvas die Maus ist?

BeitragDo, Mai 17, 2012 22:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute,
Ich habe mal wieder eine kleine Frage zu der MaxGui.
Undzwar habe ich verschiedene Canvas in meiner Anwendung.
Die Mauskoordinaten und Mausklicks frage ich dauerhaft ab.
Außerdem zeichne ich in einem bestimmten Canvas immer ein Rechteck genau dort, wo die Maus ist.
Jetzt habe ich folgende Situation: Wenn sich die Maus in einem anderen Canvas befindet, wird trotzdem das Rechteck in dem ersten Canvas gezeichnet. An der Mausposition halt, aber eben an der Mausposition des aktuellen Canvas.
Gibt es eine Möglichkeit zu prüfen, ob die Maus sich in einem bestimmten Canvas befindet? Denn ich möchte das Rechteck nur zeichnen, wenn die Maus auch in dem entsprechenden Canvas ist.
Da aber die Zeichenroutine unabhängig von allem anderen aufgerufen wird, und auch werden muss, kann ich das nicht über Events regeln.

Wäre super wenn da jemand einen Tipp hätte.

Lg, M0rgenstern

Xeres

Moderator

BeitragDo, Mai 17, 2012 22:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du MaxGui benutzt, regelst du das über Events... EventSource sollte den richtigen Canvas beinhalten.
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)

Midimaster

BeitragFr, Mai 18, 2012 8:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie fragst Du denn die Maus dann ab, wenn nicht über Events?

So sieht eine korrekte Lösung aus:

BlitzMax: [AUSKLAPPEN]
Global WoIstMaus%,MausHit%
While WaitEvent()
Local tmpGadget:TGadget = TGadget(EventSource())
Select EventID()

Case EVENT_TIMERTICK
Local Fenster:TGraphics=CanvasGraphics(Canvas1)
SetGraphics Fenster
Cls
If WoIstMaus=1
DrawRect MausX,MausY,5,5
EndIf
Flip 0


Fenster:TGraphics=CanvasGraphics(Canvas2)
SetGraphics Fenster
Cls
If WoIstMaus=2
DrawRect MausX,MausY,5,5
EndIf
Flip 0

Case EVENT_MOUSEDOWN
MausHit=1

Case EVENT_MOUSEMOVE
MausX=EventX()
MausY=EventY()
If tmpGadget=Canvas1
WoIstMaus= 1
Else
WoIstMaus= 2
EndIf
End Select
Wend
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

M0rgenstern

BeitragFr, Mai 18, 2012 8:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ha.
Danke Midimaster.
Sowas hab ich gesucht. So muss ich die Zeichenfunktion nicht direkt abhängig von dem Event machen.

Aber jetzt habe ich noch eine Frage:
Ich hab ein großes Canvas, wo meine Tilemap gemalt wird. Und das Zeichnen wird über einen Timer geregelt.
Wenn mein Laptop im Energiesparmodus ist, dann hat das ganze Programm nur noch 15 FPS (Normalerweise sind es 60).
Hab ich da Müll programmiert oder ist das in Ordnung?

Lg, M0rgenstern

Edit:
Edit2: Edit unnötig. Hab mich verlesen.
 

jsp

BeitragSa, Jun 02, 2012 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde auch das Herausfinden in welchem Canvas die Mouse gerade ist auch über Events regeln, weil das ist komplett Mousekoordinaten unabhängig ist und damit ist der Code übersichtlicher und am Ende kann man leichter Änderungen vornehmen und muss nicht immer die Parameter für die Mausabfrage neu definieren:

EVENT_MOUSEENTER wird ausgelöst wenn die Maus ins Canvas hineingeht
EVENT_MOUSELEAVE wird ausgelöst wenn die Maus herausgeht

-jsp-
Logic Gui Professional a Gui Designer for MaxGui

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group