OpenWindowedScreen mit Mousekontrolle...

Anfängerfragen zum Programmieren mit PureBasic.
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

OpenWindowedScreen mit Mousekontrolle...

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: OpenWindowedScreen mit Mousekontrolle...

Beitrag von STARGÅTE »

Da du einen Screen öffnest, kannst du die Mouse-Library nutzen.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Re: OpenWindowedScreen mit Mousekontrolle...

Beitrag 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....
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Re: OpenWindowedScreen mit Mousekontrolle...

Beitrag 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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: OpenWindowedScreen mit Mousekontrolle...

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Re: OpenWindowedScreen mit Mousekontrolle...

Beitrag 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....
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: OpenWindowedScreen mit Mousekontrolle...

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten