Merci pour le temps que tu passes sur mes cas

Code : Tout sélectionner
If InitSprite()=0:MessageRequester("Oops!","Video could not be initialized, quitting!"):End:EndIf
If InitKeyboard()=0:MessageRequester("Oops!","Keyboard could not be initialized, quitting!"):End:EndIf
#scrx=640 ; résolution x de l'écran
#scry=480 ; résolution y de l'écran
#numstars=128 ; nombre d'étoiles par plan
#starplan=3 ; nombre de plans
Structure StarVars
star_x.l
star_y.l
star_speed.F
star_colour.l
EndStructure
Global Dim Stars.StarVars(#starplan,#numstars)
; Il vaut mieux placer les procédures avant l'ouverture de la fenêtre
Procedure _2DStarfield()
For S=1 To #starplan
For F=0 To #numstars-1
Stars(S,F)\star_x=Random(#scrx)
Stars(S,F)\star_y=Random(480,0)
Next F
Next S
For F=0 To #numstars-1
Stars(1,F)\star_speed=3 : Stars(1,F)\star_colour=RGB(64,64,64)
Stars(2,F)\star_speed=4 : Stars(2,F)\star_colour=RGB(128,128,128)
Stars(3,F)\star_speed=5 : Stars(3,F)\star_colour=RGB(255,255,255)
Next F
EndProcedure
Procedure bouge2DStarfield()
For S=1 To #starplan
For F=0 To #numstars-1
Box(Stars(S,F)\star_x,Stars(S,F)\star_y,1,1,Stars(S,F)\star_colour)
Stars(S,F)\star_x-Stars(S,F)\star_speed
If Stars(S,F)\star_x<=0:Stars(S,F)\star_x=#scrx:EndIf
Next F
Next S
EndProcedure
If FS=0
OpenWindow(1,0,0,#scrx,#scry,"",#PB_Window_ScreenCentered|#PB_Window_WindowCentered)
OpenWindowedScreen(WindowID(1),0,0,#scrx,#scry)
Else
OpenScreen(#scrx,#scry,32,"",#PB_Screen_WaitSynchronization,60)
EndIf
_2DStarfield() ; creation du starfield
Repeat
; toujours vider la liste des events (voir WaitWindowEvent() pour plus d'infos)
Repeat
; on vérifie les evenements, si on n'en a pas, on peut sortir de cette boucle-ci
If FS
event = WaitWindowEvent(1)
Else
Delay(1)
EndIf
Until Event =0
if ExamineKeyboard() : endif
ClearScreen(RGB(0,0,0))
If StartDrawing(ScreenOutput())
bouge2DStarfield()
StopDrawing()
EndIf
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
C'est galère oui (carrément) mais c'est comme ça pour n'importe quel jeu. On est obligé de sortir de la fenêtre pour reprendre la main sur la souris, donc faut pas trop focaliser là dessus.blendman a écrit : Par contre, avec le screen, si tu utilises examineMouse(), ça bloque la souris dans l'écran, et ça c'est assez galère.
Code : Tout sélectionner
Declare CreaCurseur()
If InitSprite()=0:MessageRequester("Oops!","Video could not be initialized, quitting!"):End:EndIf
If InitKeyboard()=0:MessageRequester("Oops!","Keyboard could not be initialized, quitting!"):End:EndIf
If InitMouse()=0:MessageRequester("Oops!","Mouse could not be initialized, quitting!"):End:EndIf
Enumeration Souris
#CURSEUR
EndEnumeration
#scrx=640 ; résolution x de l'écran
#scry=480 ; résolution y de l'écran
#numstars=128 ; nombre d'étoiles par plan
#starplan=3 ; nombre de plans
Structure StarVars
star_x.l
star_y.l
star_speed.F
star_colour.l
EndStructure
Global Dim Stars.StarVars(#starplan,#numstars)
Global MX, MY
; Il vaut mieux placer les procédures avant l'ouverture de la fenêtre
Procedure _2DStarfield()
For S=1 To #starplan
For F=0 To #numstars-1
Stars(S,F)\star_x=Random(#scrx)
Stars(S,F)\star_y=Random(480,0)
Next F
Next S
For F=0 To #numstars-1
Stars(1,F)\star_speed=3 : Stars(1,F)\star_colour=RGB(64,64,64)
Stars(2,F)\star_speed=4 : Stars(2,F)\star_colour=RGB(128,128,128)
Stars(3,F)\star_speed=5 : Stars(3,F)\star_colour=RGB(255,255,255)
Next F
EndProcedure
Procedure CreaCurseur()
CreateSprite(#CURSEUR,5,5,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(#CURSEUR))
Box(0,0,5,5,$FFFFFF)
StopDrawing()
EndProcedure
Procedure ShowCurseur()
DisplaySprite(#CURSEUR,MX,MY)
EndProcedure
Procedure bouge2DStarfield()
For S=1 To #starplan
For F=0 To #numstars-1
Box(Stars(S,F)\star_x,Stars(S,F)\star_y,1,1,Stars(S,F)\star_colour)
Stars(S,F)\star_x-Stars(S,F)\star_speed
If Stars(S,F)\star_x<=0:Stars(S,F)\star_x=#scrx:EndIf
Next F
Next S
EndProcedure
If FS=0
OpenWindow(1,0,0,#scrx,#scry,"",#PB_Window_ScreenCentered|#PB_Window_WindowCentered)
OpenWindowedScreen(WindowID(1),0,0,#scrx,#scry)
CreaCurseur()
Else
OpenScreen(#scrx,#scry,32,"",#PB_Screen_WaitSynchronization,60)
CreaCurseur()
EndIf
_2DStarfield() ; creation du starfield
Repeat
; toujours vider la liste des events (voir WaitWindowEvent() pour plus d'infos)
Repeat
; on vérifie les evenements, si on n'en a pas, on peut sortir de cette boucle-ci
If FS
event = WaitWindowEvent(1)
Else
Delay(1)
EndIf
Until Event =0
If ExamineKeyboard() And ExamineMouse() : EndIf
MX = MouseX()
MY = MouseY()
ClearScreen(RGB(0,0,0))
If StartDrawing(ScreenOutput())
bouge2DStarfield()
If MX = 0 Or MX > 635 Or MY = 0 Or MY > 475
DrawText(240, 240, "Press escape to leave",$FFFFFF)
EndIf
StopDrawing()
EndIf
ShowCurseur()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
Code : Tout sélectionner
Declare CreaCurseur()
If InitSprite()=0:MessageRequester("Oops!","Video could not be initialized, quitting!"):End:EndIf
If InitKeyboard()=0:MessageRequester("Oops!","Keyboard could not be initialized, quitting!"):End:EndIf
If InitMouse()=0:MessageRequester("Oops!","Mouse could not be initialized, quitting!"):End:EndIf
Enumeration Souris
#CURSEUR
EndEnumeration
#scrx=640 ; résolution x de l'écran
#scry=480 ; résolution y de l'écran
#numstars=128 ; nombre d'étoiles par plan
#starplan=3 ; nombre de plans
Structure StarVars
star_x.l
star_y.l
star_speed.F
star_colour.l
EndStructure
Global Dim Stars.StarVars(#starplan,#numstars)
Global MX, MY
; Il vaut mieux placer les procédures avant l'ouverture de la fenêtre
Procedure _2DStarfield()
For S=1 To #starplan
For F=0 To #numstars-1
Stars(S,F)\star_x=Random(#scrx)
Stars(S,F)\star_y=Random(480,0)
Next F
Next S
For F=0 To #numstars-1
Stars(1,F)\star_speed=3 : Stars(1,F)\star_colour=RGB(64,64,64)
Stars(2,F)\star_speed=4 : Stars(2,F)\star_colour=RGB(128,128,128)
Stars(3,F)\star_speed=5 : Stars(3,F)\star_colour=RGB(255,255,255)
Next F
EndProcedure
Procedure CreaCurseur()
CreateSprite(#CURSEUR,5,5,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(#CURSEUR))
Box(0,0,5,5,$FFFFFF)
StopDrawing()
EndProcedure
Procedure ShowCurseur()
DisplaySprite(#CURSEUR,MX,MY)
EndProcedure
Procedure bouge2DStarfield()
For S=1 To #starplan
For F=0 To #numstars-1
Box(Stars(S,F)\star_x,Stars(S,F)\star_y,1,1,Stars(S,F)\star_colour)
Stars(S,F)\star_x-Stars(S,F)\star_speed
If Stars(S,F)\star_x<=0:Stars(S,F)\star_x=#scrx:EndIf
Next F
Next S
EndProcedure
;Maerge autour du screen
MargeG=0
MargeH=0
If FS=0
OpenWindow(1,0,0,#scrx,#scry,"",#PB_Window_ScreenCentered|#PB_Window_WindowCentered)
OpenWindowedScreen(WindowID(1),0,0,#scrx,#scry)
CreaCurseur()
Else
OpenScreen(#scrx,#scry,32,"",#PB_Screen_WaitSynchronization,60)
CreaCurseur()
EndIf
_2DStarfield() ; creation du starfield
Repeat
; toujours vider la liste des events (voir WaitWindowEvent() pour plus d'infos)
Repeat
; on vérifie les evenements, si on n'en a pas, on peut sortir de cette boucle-ci
If FS
event = WaitWindowEvent(1)
Else
Delay(1)
EndIf
Until Event =0
If FS=0
; Gestion de la capture de la souris dans le screen
If inScreen = #True ; Si la souris est dans le screen...
If MouseX() > #scrx-2 Or MouseY() > #scry-2 Or MouseX() < 1 Or MouseY() <1
ReleaseMouse(#True) ; ...et si elle s'approche des bords du screen alors on libère la souris
inScreen = #False
EndIf
Else
mx = WindowMouseX(1) ; Sinon, si la souris entre dans le screen...
my = WindowMouseY(1)
If mx < #scrx + MargeG And mx > MargeG And my > MargeH And my < MargeH + #scry
ReleaseMouse(#False) ; ... alors on capture la souris
MouseLocate(mx-MargeG,my-MargeH)
inScreen = #True
EndIf
EndIf
EndIf
;If inScreen ; Déclenche l'affichage si la souris est dans l'écran noir...
If ExamineKeyboard() And ExamineMouse() : EndIf
If KeyboardPushed(#PB_Key_Escape) : End : EndIf
MX = MouseX()
MY = MouseY()
ClearScreen(RGB(0,0,0))
If StartDrawing(ScreenOutput())
bouge2DStarfield()
If MX = 0 Or MX > 635 Or MY = 0 Or MY > 475
DrawText(240, 240, "Press escape to leave",$FFFFFF)
EndIf
StopDrawing()
EndIf
If inScreen = #True ; Si la souris est dans le screen...
ShowCurseur()
EndIf
;EndIf
FlipBuffers()
ForEver
Code : Tout sélectionner
;****************************************************************
; Program: WindowedScreen + GUI Eventhandling Demo
; Author: netmaestro
; Date: March 22, 2007
; License: Free, unrestricted, credit appreciated
; but not required
;****************************************************************
; changed by LJ on 8.7.2008, trying to make it run on Linux
; Ajout Mesa
Declare CreaCurseur()
Declare _2DStarfield()
If InitSprite()=0:MessageRequester("Oops!","Video could not be initialized, quitting!"):End:EndIf
If InitKeyboard()=0:MessageRequester("Oops!","Keyboard could not be initialized, quitting!"):End:EndIf
If InitMouse()=0:MessageRequester("Oops!","Mouse could not be initialized, quitting!"):End:EndIf
Enumeration Souris
#CURSEUR
EndEnumeration
#ScreenW=640 ; résolution x de l'écran
#ScreenH=480 ; résolution y de l'écran
#numstars=128; nombre d'étoiles par plan
#starplan=3 ; nombre de plans
Structure StarVars
star_x.l
star_y.l
star_speed.F
star_colour.l
EndStructure
Global Dim Stars.StarVars(#starplan,#numstars)
Global MX, MY
Procedure.i GestionAltTab()
ReleaseMouse(#True)
CloseScreen ()
OpenWindow (1,1,1,1,1, "Starfield" , #PB_Window_Minimize )
Repeat
Ev= WaitWindowEvent(1)
Until Ev= #PB_Event_ActivateWindow
CloseWindow (1)
; Il faut tout refaire
OpenScreen(#ScreenW,#ScreenH,32,"Starfield",#PB_Screen_WaitSynchronization,60)
CreaCurseur()
_2DStarfield()
ReleaseMouse(#False)
ProcedureReturn #True
EndProcedure
; Il vaut mieux placer les procédures avant l'ouverture de la fenêtre
Procedure _2DStarfield()
For S=1 To #starplan
For F=0 To #numstars-1
Stars(S,F)\star_x=Random(#ScreenW)
Stars(S,F)\star_y=Random(480,0)
Next F
Next S
For F=0 To #numstars-1
Stars(1,F)\star_speed=3 : Stars(1,F)\star_colour=RGB(64,64,64)
Stars(2,F)\star_speed=4 : Stars(2,F)\star_colour=RGB(128,128,128)
Stars(3,F)\star_speed=5 : Stars(3,F)\star_colour=RGB(255,255,255)
Next F
EndProcedure
Procedure CreaCurseur()
CreateSprite(#CURSEUR,5,5,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(#CURSEUR))
Box(0,0,5,5,$FFFFFF)
StopDrawing()
EndProcedure
Procedure ShowCurseur()
DisplaySprite(#CURSEUR,MX,MY)
EndProcedure
;Marge autour du screen
#LeftOffset = 20
#TopOffset = 20
;***********************
Global FS=0
;***********************
If FS=0
OpenWindow(0,0,0,#ScreenW,#ScreenH,"Starfield",#PB_Window_ScreenCentered|#PB_Window_WindowCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0),0,0,#ScreenW,#ScreenH)
CreaCurseur()
Else
OpenScreen(#ScreenW,#ScreenH,32,"Starfield",#PB_Screen_WaitSynchronization,60)
CreaCurseur()
EndIf
_2DStarfield() ; creation du starfield
Procedure bouge2DStarfield(inscreen)
ClearScreen(0)
;
; Display your screen stuff
StartDrawing(ScreenOutput())
For S=1 To #starplan
For F=0 To #numstars-1
Box(Stars(S,F)\star_x,Stars(S,F)\star_y,1,1,Stars(S,F)\star_colour)
Stars(S,F)\star_x-Stars(S,F)\star_speed
If Stars(S,F)\star_x<=0:Stars(S,F)\star_x=#ScreenW:EndIf
Next F
Next S
StopDrawing()
;
If inscreen Or FS=1
ExamineMouse()
StartDrawing(ScreenOutput())
DrawText(250,200," Souris capturée ",#Yellow, #Black)
DrawText(260,230,"( "+RSet(Str(MouseX()),3,"0")+", "+RSet(Str(MouseY()),3,"0")+" )",#White,#Black)
If MouseButton(#PB_MouseButton_Left)
Debug "clic left"
EndIf
If MouseButton(#PB_MouseButton_Middle)
Debug "clic Middle"
EndIf
If MouseButton(#PB_MouseButton_Right)
Debug "clic Right"
EndIf
StopDrawing()
DisplaySprite(0,MouseX(),MouseY())
EndIf
EndProcedure
Repeat
If inscreen
If MouseX()>#ScreenW-2 Or MouseY()>#ScreenH-2 Or MouseX()<1 Or MouseY()<1
ReleaseMouse(1); La souris est libérée de l'écran
inscreen = #False
EndIf
Else
If FS=0
Repeat
;Gestion des évènements de la fenêtre
;====================================
;Essayez les 3 possibilités mais une seule à la fois
Ev = WindowEvent() ; Animation
;Ev = WaitWindowEvent() ; Blocage de l'animation
;Ev = WaitWindowEvent(1) ; Animation mais délai d'1 ms inutile et de plus c'est une mauvaise
; façon de programmer car la pile des évènements n'est pas vidée
;Attention, si la fenêtre devait avoir des gadgets (buttongadget,...), il faudrait utiliser une autre façon de faire avec WaitWindowEvent(). VOir l'aide de WaitWindowEvent()
Select Ev
Case #PB_Event_CloseWindow
End
EndSelect
Until Ev=0
mx = WindowMouseX(0):my = WindowMouseY(0)
If Bool(mx < #ScreenW+#LeftOffset And mx > #LeftOffset And my > #TopOffset And my < #TopOffset+#ScreenH)
ReleaseMouse(0) ;La souris est capturée dans l'écran
MouseLocate(mx-#LeftOffset,my-#TopOffset)
inscreen = #True
EndIf
EndIf
EndIf
bouge2DStarfield(inscreen)
FlipBuffers()
If IsScreenActive() = 0
If FS=1
GestionAltTab()
Else
SetWindowState(0, #PB_Window_Minimize)
EndIf
EndIf
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)