Mauskoordinaten werden ausserhalb des Fensters erfasst. Bug?
Übersicht

![]() |
BobBetreff: Mauskoordinaten werden ausserhalb des Fensters erfasst. Bug? |
![]() Antworten mit Zitat ![]() |
---|---|---|
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? ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke Dremora.
Falls dir der Api Befehl noch einfällt wäre ich nochmal dankbar wen du ihn hier rein schreibst. |
||
![]() |
hamZtaAdministrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit 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.
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bob hat Folgendes geschrieben: Code: [AUSKLAPPEN] 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 Or my<0 Or mX > screenX Or My > ScreenY Then Goto ende
... #ende If mX>0 And my>0 And mX < screenX And My < ScreenY Then
... dann klapts auch mit dem strictmode xD
... EndIf |
||
MrKeks.net |
![]() |
hamZtaAdministrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group