Seite 1 von 1

OpenWindowedScreen mit Mousekontrolle...

Verfasst: 09.10.2013 09:52
von Drago
Hallo Leute.....

Ich habe dieses

Code: Alles auswählen

OpenWindow( #WINDOW, 0, 0, GameWidth, GameHeight, "Windowed Screen", #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered | #PB_Window_BorderLess )
ContainerGadget( #GADGET, 0, 0, GameWidth, GameHeight )

OpenWindowedScreen( GadgetID( #GADGET ), 0, 0, GameWidth, GameHeight, 1, 0, 0, #PB_Screen_WaitSynchronization   )
Und ich möchte die totale Kontrolle über die Maus haben.
Die Position kann man ja abfragen, dafür bietet PureBasic ja Befehle.

Aber wie kann ich festestellen:

A.) Ob die Taste gedrückt wurde
B.) Ob die Taste noch gedrückt ist
C.) Ob sie losgelassen wurde

Ich kenne mich noch überhaupt nicht aus mit dem Fensterkram, habe schon versucht etwas raus zu finden, bin aber verunsichert,
WIE ich es am besten machen soll.
CallBack ? Hook ? oder, oder...lach

LG Klaus

Re: OpenWindowedScreen mit Mousekontrolle...

Verfasst: 09.10.2013 10:33
von STARGÅTE
Da du einen Screen öffnest, kannst du die Mouse-Library nutzen.

Re: OpenWindowedScreen mit Mousekontrolle...

Verfasst: 09.10.2013 11:10
von Drago
Dachte ich auch, ABER...

Code: Alles auswählen

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitSprite3D() = 0 Or InitSound() = 0 Or InitMouse() = 0 
     MessageRequester( "Error", "Can't open DirectX 7 or later", 0 )
     End
EndIf

OpenWindow( 0, 0, 0, 1024, 768, "Windowed Screen", #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered | #PB_Window_BorderLess )
ContainerGadget( 0, 0, 0, 1024, 768 )
OpenWindowedScreen( GadgetID( 0 ), 0, 0, 1024, 768, 1, 0, 0, #PB_Screen_WaitSynchronization   )

Repeat
  
     Repeat
          Event = WindowEvent()
          
          Select Event 
                    
               Case #PB_Event_Gadget
                    If EventGadget() = 0
                         End
                    EndIf
                    
               Case #PB_Event_CloseWindow
                    End 
                    
          EndSelect
          
     Until Event = 0
     
     
     ClearScreen(RGB(0, 0, 0))
     
     ExamineMouse()
     
     If MouseButton( #PB_MouseButton_Left )
          Debug "Linke Maustaste gedrückt"
     EndIf
     
     
     FlipBuffers() 
     Delay(1)
Until Event = #PB_Event_CloseWindow
funktioniert nicht......

Außerdem weiß ich dann immer noch nicht:

B.) Ob die Taste noch gedrückt ist ( besser gesagt, ob sie immer noch gedrückt ist )
C.) Ob sie losgelassen wurde


Ich möchte in meinem Spiel folgendes machen:

Der Benutzer soll mit der linken Maustaste auf ein "SpriteDisplay" klicken können UND wenn die Maustaste gedrückt bleibt,
soll er das "SpriteDisplay" auf dem Screen verschieben können.
Deswegen B und C....

Re: OpenWindowedScreen mit Mousekontrolle...

Verfasst: 09.10.2013 12:15
von Drago
Also, folgendes habe ich raus gefunden:

Die Mouse-Library funktioniert nur in einem Fenster mit einem WindowedScreen drinnen.
Aber NICHT wenn ich ein Fenster mit einem ContainerGadget und darin einen WindowedScreen habe.

Ich brauche aber das ContainerGadget, da ich mehrere Auflösungen anbieten möchte und ich das Gadget
dann auf die neue Auflösung Resizen kann, unabhängig vom Fenster.

Re: OpenWindowedScreen mit Mousekontrolle...

Verfasst: 09.10.2013 12:59
von STARGÅTE
Nun ja, in der Hilfe zu OpenWindowedScreen() steht auch eindeutig WindowID und nicht GadgetID.
Das dein Code funktioniert ist also keine offizielles Feature!

Was macht es denn für einen Sinn, das Gadget zu vergrößern aber das Fenster nicht? Dann ändert sich doch die Auflösung nicht.

Für B und C kannst du einfach eine eigene Variable definieren, zB so:

Code: Alles auswählen

If MouseButton(#PB_MouseButton_Left) = #True
   If LeftMouse = #False
      Debug "Down Event"
   Else
      Debug "Pushed"
   EndIf
   LeftMouse = #True
ElseIf MouseButton(#PB_MouseButton_Left) = #False And LeftMouse = #True
   Debug "Up Event"
   LeftMouse = #False
EndIf

Re: OpenWindowedScreen mit Mousekontrolle...

Verfasst: 09.10.2013 13:45
von Drago
Naja, Sinn macht es schon, denke ich.
Ich mache das Fenster auf Fullscreen und erstelle darin das auf die neue Auflösung angepasste Gadget.
Fenster = Originale Desktopauflösung
Gadget = Spielauflösung

Wie wäre denn die Alternative ?

Wenn ich nur das Fenster auf Fullscreen mache, wird der Screen auf die neue Größe gezoomt.
Aber ich möchte ja, das der Spieler in einer 1920x1080 Desktopauflösung mit einem, sagen wir mal 1024x768
SpielScreen genauso viel sieht, wie in einer 800x600 Desktopauflösung.
Also, muß ich ja den SpielScreen auf eine neue Größe umrechnen, im Verhältniss...

Übrigens habe ich den Code hier aus dem Forum geklaut, das mit dem WindowedScreen im Gadget... :-)

Die einzige Alternative die mir einfallen würde, wäre, das ich den gerenderten Screen grabe und dann
auf die neue SpielScreengröße zoome.
Dann ginge das auch mit dem Fenster, ich weiß aber nicht, ob das nicht zu langsam ist....

Re: OpenWindowedScreen mit Mousekontrolle...

Verfasst: 09.10.2013 15:17
von PMV
Fullscreen? Wie wärs mit OpenScreen() :wink:
Und wenn du unbedingt den Fullscreen simulieren willst, solltest
du eher die native Auflösung des Monitors ändern (per API) und
dann ein rahmenloses Fenster auf die Desktopauflösung setzen.
Wer hingegen ein Spiel in einem Fenster darstellen lässt, will auch
die entsprechende Auflösung und nichts skaliertes.

MFG PMV