Multitache plien ecran

Sujets variés concernant le développement en PureBasic
Marcus
Messages : 187
Inscription : jeu. 22/janv./2004 19:08
Contact :

Multitache plien ecran

Message par Marcus »

En attendant mieux de la part de Fred :wink:

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
Marcus
Messages : 187
Inscription : jeu. 22/janv./2004 19:08
Contact :

Message 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) 
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message 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 :)
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message 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 ?
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message 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 :lol:
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
Invité

Message 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).
M arcus

Message 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)
M arcus

Message 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
Marcus
Messages : 187
Inscription : jeu. 22/janv./2004 19:08
Contact :

Message par Marcus »

Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Pas de problèmes pour invaders11 sous Win98SE :D
M arcus

Message 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
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Oui, là je te répond avec ton prog en fond. Mais il ne se met pas en pause automatiquement : exprès ?
M arcus

Message par M arcus »

ui normal faut apuyer sur p avant de basculer
Merci
Pierre
Messages : 244
Inscription : ven. 23/janv./2004 20:29
Localisation : 77 (Région parisienne)

Message par Pierre »

c'est bête mais je sais pas ce que c'est que le multitâche :oops:
le nom explique un peu ce que c'est mais ça me dit pas tout
quelqu'un peut m'expliquer?
Image
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message 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 :lol:
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 :wink:
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
Répondre