Page 1 sur 2
Multitache plien ecran
Publié : sam. 14/févr./2004 19:05
par Marcus
En attendant mieux de la part de Fred
Bon avec l'aide de Keph et Cederavic j'ai enfin reussi à créer un mode 100% multitache plien ecran sous windows !
et ce sans ce prendre la tete avec des tests !
Cela fonctionne nikel , on peut tout comme en Openscreen() choisir la resolusion , la syncro , le framerate et m^m mieu redimensionner l'ecran.
on peut quant m^m remarquer quelques saccades de temps a autre relative a ce mode comparé a un plien ecran traditionnel mais vraiment pas méchant à condition de ne pas laisser trop de taches tourner en fond pour rien .
Je vous prépare un bout de code pour expliquer ce principe ---
Merci encore à Cederavic et Keph
Publié : dim. 15/févr./2004 14:13
par Marcus
Code : Tout sélectionner
InitSprite()
InitKeyboard()
iiiii.b=1
pause.b=-1
OpenScreen(1024,768,32,"")
Repeat
StartDrawing(ScreenOutput())
DrawingMode(1)
FrontColor(255,255,255)
Locate(10,50)
DrawText("1 Plein ecran Exclusif ")
Locate(10,70)
DrawText("2 Plein ecran Windows ")
StopDrawing()
FlipBuffers()
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_1) Or KeyboardPushed(#PB_Key_2) Or KeyboardPushed(#PB_Key_Escape) Or KeyboardPushed(#PB_Key_Pad2) Or KeyboardPushed(#PB_Key_Pad1)
If KeyboardPushed(#PB_Key_1) Or KeyboardPushed(#PB_Key_Pad1):choix_screen =1 :EndIf
If KeyboardPushed(#PB_Key_2) Or KeyboardPushed(#PB_Key_Pad2):choix_screen =2 :EndIf
If KeyboardPushed(#PB_Key_Escape) :End :EndIf
CloseScreen()
If choix_screen=2
Global xxx.w,yyy.w,bits.b,sync.b
xxx=1024
yyy=768
bits=32
sync=75
ChangeResolution(xxx,yyy,bits,sync)
OpenWindow(0, 0 ,0,xxx,yyy , #PB_Window_ScreenCentered |#PB_Window_WindowCentered| #PB_Window_BorderLess , "") ; pour une cran dana sun fenetre
OpenWindowedScreen(WindowID(0), 0, 0,1024,768, 1, 0, 0)
SetFrameRate(sync)
ShowCursor_(#False)
ActivateWindow()
WindowEvent()
EndIf
If choix_screen=1
SetRefreshRate(75)
OpenScreen(1024,768,32,"")
SetFrameRate(75)
EndIf
Repeat
If choix_screen=2 :ActivateWindow(): EndIf
ExamineKeyboard()
If KeyboardReleased(#PB_Key_P)
iiiii=1
EndIf
If iiiii=1
If KeyboardPushed(#PB_Key_P)
pause = -pause
Delay(200)
iiiii=0
EndIf
EndIf
If pause =-1
ClearScreen(0,0,0)
;code boucle principale
StartDrawing(ScreenOutput())
DrawingMode(1)
Box(Random(900),Random(600),Random(100),Random(100),RGB(Random(255),Random(255),Random(255)))
FrontColor(255,255,255)
Locate(10,50)
DrawText("P pause ")
Locate(10,30)
DrawText("Tab + ALT pour tester le Multitache ")
Locate(10,10)
If choix_screen=2
DrawText("Plein ecran Multitache ")
EndIf
If choix_screen=1
DrawText("Plein ecran Exclusif ")
EndIf
StopDrawing()
; ------------------
If choix_screen=2: WaitForVSync():EndIf
FlipBuffers()
Else
If choix_screen=2 :ActivateWindow(): EndIf
FlipBuffers()
Delay(10)
EndIf
Until KeyboardPushed(#PB_Key_Escape)
Publié : dim. 15/févr./2004 15:40
par cederavic
Salut tout le monde, on a besoin de vous pour un test, savoir si vous pouvez utiliser le clavier qd le prog est lancer, marcus peut (xp home) et moi non (win 2k pro sp4)
vala, merci au testeur

Publié : dim. 15/févr./2004 15:56
par filperj
Je peut l'utiliser, sous xp home aussi.
Sinon, j'ai du mettre en commentaire la ligne "ChangeResolution(xxx,yyy,bits,sync)" pour l'executer. C'est quoi ?
Publié : dim. 15/févr./2004 16:16
par filperj
Et il doit manquer un windowevent() ds la boucle principale.
Il faut au moins faire semblant de récupérer les message (même si tu ne les traite pas), ça fait tellement plaisir au système

Publié : dim. 15/févr./2004 17:08
par Invité
Sinon, j'ai du mettre en commentaire la ligne "ChangeResolution(xxx,yyy,bits,sync)" pour l'executer. C'est quoi ?
C'est l'excellent choix pour la resolusion sous windobe creer par Keph
http://103683.free.fr/purebasic/Resolution.zip (4 Ko).
Publié : dim. 15/févr./2004 17:36
par M arcus
Code : Tout sélectionner
InitSprite()
InitKeyboard()
iiiii.b=1
pause.b=-1
OpenScreen(1024,768,32,"")
Repeat
StartDrawing(ScreenOutput())
DrawingMode(1)
FrontColor(255,255,255)
Locate(10,50)
DrawText("1 Plein ecran Exclusif ")
Locate(10,70)
DrawText("2 Plein ecran Windows ")
StopDrawing()
FlipBuffers()
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_1) Or KeyboardPushed(#PB_Key_2) Or KeyboardPushed(#PB_Key_Escape) Or KeyboardPushed(#PB_Key_Pad2) Or KeyboardPushed(#PB_Key_Pad1)
If KeyboardPushed(#PB_Key_1) Or KeyboardPushed(#PB_Key_Pad1):choix_screen =1 :EndIf
If KeyboardPushed(#PB_Key_2) Or KeyboardPushed(#PB_Key_Pad2):choix_screen =2 :EndIf
If KeyboardPushed(#PB_Key_Escape) :End :EndIf
CloseScreen()
If choix_screen=2
Global xxx.w,yyy.w,bits.b,sync.b
; xxx=1024
; yyy=768
xxx=GetSystemMetrics_(0)
yyy=GetSystemMetrics_(1)
bits=32
sync=75
ChangeResolution(xxx,yyy,bits,sync)
OpenWindow(0, 0 ,0,xxx,yyy , #PB_Window_ScreenCentered |#PB_Window_WindowCentered| #PB_Window_BorderLess , "") ; pour une cran dana sun fenetre
OpenWindowedScreen(WindowID(0), 0, 0,1024,768, 1, 0, 0)
SetFrameRate(sync)
ShowCursor_(#False)
ActivateWindow()
WindowEvent()
EndIf
If choix_screen=1
SetRefreshRate(75)
OpenScreen(1024,768,32,"")
SetFrameRate(75)
EndIf
Repeat
ExamineKeyboard()
If KeyboardReleased(#PB_Key_P)
iiiii=1
EndIf
If iiiii=1
If KeyboardPushed(#PB_Key_P)
pause = -pause
Delay(200)
iiiii=0
EndIf
EndIf
If pause =-1
ClearScreen(0,0,0)
;code boucle principale
StartDrawing(ScreenOutput())
DrawingMode(1)
Box(Random(900),Random(600),Random(100),Random(100),RGB(Random(255),Random(255),Random(255)))
FrontColor(255,255,255)
Locate(10,50)
DrawText("P pause ")
Locate(10,30)
DrawText("Tab + ALT pour tester le Multitache ")
Locate(10,10)
If choix_screen=2
DrawText("Plein ecran Multitache ")
EndIf
If choix_screen=1
DrawText("Plein ecran Exclusif ")
EndIf
StopDrawing()
; ------------------
If choix_screen=2:ActivateWindow():WindowEvent(): WaitForVSync():EndIf
FlipBuffers()
Else
If choix_screen=2 :WindowEvent() :EndIf
FlipBuffers()
Delay(10)
EndIf
Until KeyboardPushed(#PB_Key_Escape)
Publié : dim. 15/févr./2004 17:48
par M arcus
htt://perso.wanadoo.fr/marcus.zone/fichiers/invaders11.exe
Merci de tester le Mode 2
Verifiez si le multitache fonctionne normalement et libere le clavier Alt+tab
Publié : dim. 15/févr./2004 17:51
par Marcus
Publié : dim. 15/févr./2004 20:15
par Oliv
Pas de problèmes pour invaders11 sous Win98SE

Publié : dim. 15/févr./2004 20:49
par M arcus
Merci Oliv
c'est justement sous 98se que j'ai de doute de test
As tu bien testé si le clavier etait libéré aprés un Alt+Tab avec mon truc en pause en fond ( appuyer sur P avec alt+tab)
si tu pouvais revenir normalement a mon truc et le quitter ?
Merci
Publié : dim. 15/févr./2004 21:02
par Oliv
Oui, là je te répond avec ton prog en fond. Mais il ne se met pas en pause automatiquement : exprès ?
Publié : dim. 15/févr./2004 21:37
par M arcus
ui normal faut apuyer sur p avant de basculer
Merci
Publié : dim. 15/févr./2004 22:59
par Pierre
c'est bête mais je sais pas ce que c'est que le multitâche
le nom explique un peu ce que c'est mais ça me dit pas tout
quelqu'un peut m'expliquer?
Publié : dim. 15/févr./2004 23:25
par filperj
C'est tout simplement quand ton système execute plusieurs programmes en même temps, et que tu passe facilement de l'un à l'autre.
Un programme peut être plus ou moins favorable au multitâche: par exemple, un jeu en plein écran qui crashe dès que tu fait alt+tab n'est PAS favorable au multitâche
Ce que Marcus est en train de faire, c'est un prog plein écran qui se laisse bien réduire dans la barre des tâches, et qui reprend son cours gentiment quand on le rappelle
