Logikprobleme Mausposition bei Screen

Anfängerfragen zum Programmieren mit PureBasic.
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

Logikprobleme Mausposition bei Screen

Beitrag von smateja »

Hallo zusammen,

ich habe ein kleines Logik-Problem und evtl. könnt Ihr mir ja helfen.
Ich verwende das PureGDK also nicht wundern wegen den db Kommandos.

Ziel ist es, die Maus immer wieder in die Mitte des Screens zurück zu setzten, da sonst bei 2 Monitoren die Maus auf einmal rechts auf dem 2. Monitor hängt. Zudem hab ich sonst eine Begrentzung wenn ich z.B. an den linken Bildschirmrand fahre.

Allerdings passiert dank dem zurücksetzen in die Mitte des Screens, dass ich mich ein paar Pixel drehen kann - dann wieder zentriert - logisch. Allerdings schaff ich es nicht dass ich die Mouse Koordinaten irgendwie zwischenspeichere und ach - schaut selbst:

Code: Alles auswählen


MouseX.f=dbMouseMoveX()
MouseY.f=dbMouseMoveY()
MouseZ.f=dbMouseMoveZ()

MouseXNew.f = MouseXNew.f+MouseX.f
MouseYNew.f = MouseYNew.f+MouseY.f
MouseZNew.f = MouseZNew.f+MouseZ.f
   
   
If MouseYNew.f > 70
  MouseYNew.f = 70
EndIf

If MouseYNew.f < -70
  MouseYNew.f = -70
EndIf


dbRotateCamera(MouseYNew.f, MouseXNew.f, MouseZNew.f,#Cam001)
dbPositionMouse(DesktopWidth(0)/2, DesktopHeight(0)/2)

LG und merci fürs mittüffteln mal im Vorraus.
PB 4.6 / 32 Bit / 64 Bit
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Logikprobleme Mausposition bei Screen

Beitrag von Kaeru Gaman »

brauchst du denn den mauszeiger?
wenn nicht, kannst du die mausposition eigentlich komplett ignorieren, und nur die relativbewegung ermitteln.
also, bei PB wären das MouseDeltaX() und MouseDeltaY().
die geben immer die Relativbewegung an, auch wenn der zeiger am Rand anstoßen würde.

ich bin etwas irritiert von dem Z, weil meine maus sich nur in zwei richtungen bewegt...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

Re: Logikprobleme Mausposition bei Screen

Beitrag von smateja »

Das Problem ist, dass ich im Hintergrund der Anwendung dann quasi mit der Maus auf den 2. Monitor fahren kann - sobald ich dann klicke - ist die Anwendung weg und z. B. FireFox im Vordergrund.

Aber das mit MouseDeltaX() ist evtl garnicht schlecht - muß ich mal gerade versuchen ob mich das weiter bringt.
PB 4.6 / 32 Bit / 64 Bit
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

Re: Logikprobleme Mausposition bei Screen

Beitrag von smateja »

Nachtrag:

scheint so als würde die ExamineMouse() und MouseX() etc. Kommandos nicht in Verbindung mit dem PureGDK funktionieren.
Die ExamineKeyboard() hingegen funktionieren einwandfrei.

Scheint als braucht man wohl zwingend einen Screen damit MouseX() etc. von PB funktionieren was für die KeyboardCommandos nicht gilt. Somit komme ich hier damit nicht weiter.

*Mal weiter grübelt*
PB 4.6 / 32 Bit / 64 Bit
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

Re: Logikprobleme Mausposition bei Screen

Beitrag von smateja »

@ Kaeru Gaman

wie? das Maus-Z verwirrt dich - also ich kann die Maus hochheben und dann misst der laser den Abstand zum Pad :)
Bei einer Kugelmaus wird hier der Druck den man auf die Maus ausübt gemessen :)- Ne Quatsch: Das dbMouseZ = enpsricht dem Mausrad :)
PB 4.6 / 32 Bit / 64 Bit
Benutzeravatar
kswb73
Beiträge: 319
Registriert: 04.02.2008 16:51
Kontaktdaten:

Re: Logikprobleme Mausposition bei Screen

Beitrag von kswb73 »

Verstehe ich dich richtig? Du hast eine Kamera. Diese willst du mit der Maus bewegen. Damit du die Maus endlos weit bewegen kann, zentrierst du sie immer wieder in der mitte des Bildschirms. Jetzt ist dein Problem aber, dass sich die Kamera nur um wenige Pixel bewegt.

Meine Theorie (ich kenn mich mit dem PureGDK nicht aus) ist das die Kamerarotation Absolut ist. Das heißt die Kamera dreht sich nicht um fünf Grad weiter, sondern stellt sich auf einen Winkel von fünf Grad ein. Versuch mal ob folgender Code funktioniert:

Code: Alles auswählen

RotX.f
RotY.f
RotZ.f

MouseX.f=dbMouseMoveX()
MouseY.f=dbMouseMoveY()
MouseZ.f=dbMouseMoveZ()

MouseXNew.f = MouseXNew.f+MouseX.f
MouseYNew.f = MouseYNew.f+MouseY.f
MouseZNew.f = MouseZNew.f+MouseZ.f
   
   
If MouseYNew.f > 70
  MouseYNew.f = 70
EndIf

If MouseYNew.f < -70
  MouseYNew.f = -70
EndIf

RotX+MouseXNew
RotY+MouseYNew
RotZ+MouseZNew

dbRotateCamera(RotX, RotY, RotZ,#Cam001)
dbPositionMouse(DesktopWidth(0)/2, DesktopHeight(0)/2)
PS: Du musst nicht jedes mal den Typ angeben.
Windows XP: PB 4.31, PB 4.4, PB 4.51
Open Suse 11.2: PB 4.4
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

Re: Logikprobleme Mausposition bei Screen

Beitrag von smateja »

Mhmm danke für den Tipp,

funktioniert aber leider auch nicht.

Habe jetzt etwas drum rum programmiert :)

Die Maus Frage ich nun so ab: (Quasi mit PB eigenen mitteln)

Code: Alles auswählen


Global MouseX.f
Global MouseY.f
Global MouseZ.f

        MouseX.f = MouseX.f+(MouseDeltaX())*#CameraSpeed/2
        MouseY.f = MouseY.f+(MouseDeltaY())*#CameraSpeed/2
        MouseZ.f = MouseZ.f-(MouseWheel())
      

If MouseY.f > 70
  MouseY.f = 70
EndIf

If MouseY.f < -70
  MouseY.f = -70
EndIf



dbRotateCamera(MouseY.f, MouseX.f, MouseZ.f,#Cam001)
Damit das dann aber geht, lege ich unter dem PureGDK Screen noch nen Ogre Screen (Windowed) :)
Von hinten durch die Brust ins Auge :)
Ob´s das sein kann - bestimmt auch leicht performance lastig sobald ich mehr als 3 Matritzen darstelle.

Code: Alles auswählen


OpenWindow(#Desktop1,0,0,Desktop1_B,Desktop1_H,"",#PB_Window_ScreenCentered|#PB_Window_BorderLess)
OpenWindowedScreen(WindowID(#Desktop1), 0, 0, Desktop1_B, Desktop1_H, 1, 0, 0 )

hDBWnd=OpenDBWnd(WindowID(#Desktop1),0,0,Desktop1_B,Desktop1_H)

Hab auch leider noch keinen Befehl im PureGDK gefunden, mit dem man einen Vollbildscreen ohne ein vorhandenes PB Window erstellen kann.
Fazit: Tolles GDK.
PB 4.6 / 32 Bit / 64 Bit
Benutzeravatar
kswb73
Beiträge: 319
Registriert: 04.02.2008 16:51
Kontaktdaten:

Re: Logikprobleme Mausposition bei Screen

Beitrag von kswb73 »

Ich hatte vorhin ein ähnliches Problem mit einer anderen Engine. Hab den Fehler glaube ich jetzt entdeckt:

Code: Alles auswählen

MouseX.f=dbMouseMoveX()
MouseY.f=dbMouseMoveY()
MouseZ.f=dbMouseMoveZ()

RotX.f+MouseX-DesktopWidth(0)/2
RotY.f+MouseY-DesktopHeight(0)/2
RotZ.f+MouseZ

dbRotateCamera(RotX , RotY , RotZ , #Cam001)
dbPositionMouse(DesktopWidth(0)/2, DesktopHeight(0)/2)
Windows XP: PB 4.31, PB 4.4, PB 4.51
Open Suse 11.2: PB 4.4
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

Re: Logikprobleme Mausposition bei Screen

Beitrag von smateja »

Hab das Probelm nun gefunden.

Dein Code funktioniert 1A - sobald man ihn aber in eine Prozedur setzt um es übersichtlicher zu machen positioniert er die Camera anders als eben nicht in der Prozedur.

Suspekt.

Merci aber für die Hilfe
PB 4.6 / 32 Bit / 64 Bit
Benutzeravatar
kswb73
Beiträge: 319
Registriert: 04.02.2008 16:51
Kontaktdaten:

Re: Logikprobleme Mausposition bei Screen

Beitrag von kswb73 »

@smateja

Der Code funktioniert nicht in einer Procedur, da RotX, RotY und RotZ nicht zwischengespeichert werden. In den beiden Variabeln wird aber die bisherige Rotation der Kamera gespeichert. Entweder du deklarierst sie global oder static.
Windows XP: PB 4.31, PB 4.4, PB 4.51
Open Suse 11.2: PB 4.4
Antworten