Mauskoordinaten werden ausserhalb des Fensters erfasst. Bug?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Bob

Betreff: Mauskoordinaten werden ausserhalb des Fensters erfasst. Bug?

BeitragSo, Okt 15, 2006 0:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute,

habe grade das Forum durchsucht aber nichts passendes gefunden.
Ich hatte diverse Abstürze beim Probelauf meines Hexmap Editors und habe folgendes festgestellt.

Wenn man bei gedrückter Maustaste (egal welche) über die Ränder des aktuellen Fensters hinaus geht, liefert BMax weiterhin Maus Koordinaten.
Diese können also auch negative sein oder wesentlich größer als das Fenster ist.

Ist das ein Bug oder schimpft sich das Feature? Evil or Very Mad
Wen ich nun in allen Funktionen noch ne' Sicherung einbauen muss ob die Maus sich noch im Bereich des Fensters bewegt krieg ich aber die Krise.



Code: [AUSKLAPPEN]


Graphics 640,460
While Not KeyHit(Key_Escape)
   DrawText " irgendeine Maustaste Druecken und über Fensterbegrenzung bewegen",0,0
   DrawText MouseX() + " " + MouseY(),0,20
   Flip
   Cls
Wend
End
 

Dreamora

BeitragSo, Okt 15, 2006 1:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst keine Überprüfung einbauen. Du musst nur dafür sorgen, dass die Maus nicht über die Fenstergrenze kann.

Da gibt es zwei Möglichkeiten: Es gibt einen Windows API Befehl (weiss ihn leider grad net auswendig) oder du positionierst die Maus automatisch an die Fenstergrenze wenn sie drüber hinaus geht.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Bob

BeitragSo, Okt 15, 2006 7:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Dremora.

Falls dir der Api Befehl noch einfällt wäre ich nochmal dankbar wen du ihn hier rein schreibst.

hamZta

Administrator

BeitragSo, Okt 15, 2006 11:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Es gibt einen Windows API Befehl

Das geht vollkommen gegen die Plattformunabhängigkeit von BlitzMax und ist daher in meinen Augen einfach Schwachsinn.

Lös es so, dass andere Plattformen das Programm auch noch nutzen können.

hamZta
Blog.
 

Dreamora

BeitragSo, Okt 15, 2006 11:57
Antworten mit Zitat
Benutzer-Profile anzeigen
hamzta: 90% der User wollen bloss Windows, weil Linux für die meisten ein Problemfall ist (ich hab nur notebook da ist das mit den Treibern ein noch schlimmeres Thema als es eh schon ist) und man ganz einfach kein Geld für ein 3D taugliches Apple System hat.

BM ist sowieso nur auf dem Blatt Crossplattform, da selbst die BM eigenen Module nicht konsistent sind und auf jeder Plattform wieder Modifizierung von Angaben etc verlangen (speziell auf OSX).
Zusätzlich: es ist jedes Users eigene entscheidung ob er die anderen OS unterstützen will. OSX wär bei mir ne Option, Linux kann von mir aus "aussterben" was den Non-Server Gebrauch betrifft.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Bob

BeitragSo, Okt 15, 2006 12:00
Antworten mit Zitat
Benutzer-Profile anzeigen
@ hamZta
Guter Hinweis.

@Dreamora
Hast eigentlich auch recht. Linux und Mac ist mir (vorerst) egal.

Problem dennoch vorerst ohne API gelöst.
Die 3 ersten Zeilen im Mainloop.

Code: [AUSKLAPPEN]

MX = MouseX()
MY= MouseY()
If mX<0 Or my<0 Or mX > screenX Or My > ScreenY Then Goto ende


...und gut ist.

Würde mich dennoch interessieren warum das so sein muss und ob das gefixt wird.
 

Dreamora

BeitragSo, Okt 15, 2006 12:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist keine Lösung

BM Programme ohne Strict / SuperStrict sind nicht ernst zu nehmen, sorry.

Damit findest du nämlich Bugs nicht gescheit, noch funktionieren lokale Variablenscopes.


Wie gesagt, machs einfach so das die Maus im Fenster gehalten wird
Code: [AUSKLAPPEN]

mx = mousex()
my = mousey()

If MouseX() < 0                  mx=0
If MouseX() > GraphicsWidth()-1      mx=GraphicsWidth()-1
If MouseY() < 0                  my=0
If MouseY() > GraphicsHeight()-1   my=GraphicsHeight()-1
MoveMouse mx,my


wobei mx,my globale Variablen für die Mauskoordinaten sind.
Es wird allerdings nicht sonderlich schön aussehen, da der Mauszeiger sich dennoch verändert wenn er über den Rand geht, bevor die Maus ins Fenster zurück gezwunegn wird.

Ohne API (von mir aus auch noch Linux und OSX API wenn der wehrte hamzta schon so auf crossplattform beharrt. Möge er die nötigen Unix Befehle dazu beisteuern. Denn auch BM arbeitet mit Plattform eigenen Codes. Sprich die Calls einfach mit ?Win32, ?Linux, ?OSX einkapseln) ist da nix zu machen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Mr.Keks

BeitragSo, Okt 15, 2006 12:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Bob hat Folgendes geschrieben:
Code: [AUSKLAPPEN]
If mX<0 Or my<0 Or mX > screenX Or My > ScreenY Then Goto ende
...
#ende
also, ich kenne mich ja mit bmax nicht so aus, aber ich habe mal gehört, so etwas würden manche menschen auf folgende art und weise lösen:Code: [AUSKLAPPEN]
If mX>0 And my>0 And mX < screenX And My < ScreenY Then
...
EndIf
... dann klapts auch mit dem strictmode xD
MrKeks.net

hamZta

Administrator

BeitragSo, Okt 15, 2006 12:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
hamzta: 90% der User wollen bloss Windows, weil Linux für die meisten ein Problemfall ist (ich hab nur notebook da ist das mit den Treibern ein noch schlimmeres Thema als es eh schon ist) und man ganz einfach kein Geld für ein 3D taugliches Apple System hat.


Du empfiehlst also, einfach Linux und MacOS "auszusperren" weils eh nur ein paar Leute benutzen?

Schon die Bewerbung für Microsoft abgeschickt?

hamZta
Blog.

faggie

BeitragSo, Okt 15, 2006 12:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
[...] und man ganz einfach kein Geld für ein 3D taugliches Apple System hat.

Nur mal ganz nebenbei: Ich habe meinen Mac mini für 380€ ersteigert und kann problemlos Enemy Territory spielen.

Ich finde es schon wichtig, Spiele plattformunabhängig zu programmieren.

Gruß,
faggie

Bob

BeitragSo, Okt 15, 2006 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
faggie hat Folgendes geschrieben:
Ich finde es schon wichtig, Spiele plattformunabhängig zu programmieren.


Grundsätzlich ist das schon richtig. Von einem "Hobby Prograqmmierer" sollte man aber weder verlangen das er drei verschieden System oder Emulatroen VM's, oder was auch immer, verwendet, noch die Zeit aufbringt sich mit allen Systemspezifischen Problemen der entsprechenden Sprache auseinander zu setzent.

Ich habe halt einen Windows Rechner, wie ja wohl auch die überwiegende Mehrheit. Da interessieren mich Apple und Unix Spezialitäten hezlich wenig.
Windows bringt schon genug Ärger mit sich da kann ich auf 2 weitere Fehlerquellen gern verzichten.

Aber darum gehts hier ja eigentlich auch garnicht.

Mein oben beschrieben Lösung bleibt solange drin bis das Programm fertrig ist. Dannach wird es sowieso im Fullscreen Modus ausgeführt. Da kan der Bug nicht zuschlagen.

Strict verwende ich im übrigen trozdem. Ich muss, je nach Testart, halt nur ab und zu 3 Zeilen Remen bzw. deremen.

Ich hoffe der Bug wird demnächst behoben. Dann erledigt sich nämlich auch der Rest.

BladeRunner

Moderator

BeitragSo, Okt 15, 2006 19:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich finde dass ist eher feature denn bug:
Beispiel Scrollbars: Wenn man sich da das Verhalten unter Windows betrachtet ist es durchaus so dass man das Applikationsfenster verlassen kann und dennoch der Balken weitergeführt wird. Ist ja auch sinnvoll, denn wenn man die ganze Zeit auf den Rahmen des Scrollbars beschränkt wäre käme es häufiger zum "zurückflutschen". Wäre sehr nervig. Dafür muss dann aber bei einer Eigenimplementierung auch die Koordinate ausserhalb des Fensters zur Verfügung stehen.
Es gibt auch sicher noch andere Beispiele. (Mir fiele spontan ein 'juggle wheel' ein welches per Mouse simuliert wird).
Wer nur Koords im fenster braucht kann sich mit einer flotten, einmal geschriebenen Funktion behelfen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group