OpenScreen()

Syntaxe

Resultat = OpenScreen(Largeur, Hauteur, Profondeur, Titre$ [, FlipMode [, TauxDeRafraichissement])
Description
Ouvre un nouvel écran.

Arguments

Largeur, Hauteur La résolution de l'écran, en pixels.

Attention, la résolution voulue doit pouvoir être supportée par le matériel.
La fonction ExamineScreenModes() permet d'obtenir la liste des résolutions supportées par le matériel.
Profondeur Peut prendre l'une des valeurs suivantes :
  16: 65536 couleurs, palette fixe
  24: 16777216 couleurs, palette fixe
  32: 16777216 couleurs, plus rapide que le mode 24-bit, la transparence (alphablending) est autorisée.
Titre$ Le titre de l'application.
Sous Windows seulement. Le paramètre 'Titre$' sera affiché dans la barre des tâches lors d'un retour vers le bureau. Il est conseillé de choisir un nom approprié à l'application.
FlipMode (optionnel) Définit le mode de synchronisation utilisé avant l'échange des buffers.
(Vertical blank synchronization = Synchro verticale)').

Peut prendre l'une des valeurs suivantes :
   #PB_Screen_NoSynchronization   : Désactive la synchronisation 
   #PB_Screen_WaitSynchronization : Active la synchronisation (mode par défaut)
   #PB_Screen_SmartSynchronization: Active la synchronisation en essayant de préserver le temps processeur,lorsque le jeu 
                                    est en mode plein écran.
Attendre la synchronisation permet d'avoir des inversions de buffers parfaites, sans 'tearing' (ancienne et nouvelle image à moitié visible) ou autres effets parasites car l'inversion est effectuée lorsque que le faisceau lumineux est en dehors de la partie visible de l'écran. De plus, l'inversion se fait à un rythme régulier, en relation avec sa fréquence de rafraîchissement: par exemple, pour un écran en 60 Hz, l'inversion pourra se faire au maximum 60 fois par seconde (donc on aura un rythme régulier de 60 images/secondes).
TauxDeRafraichissement (optionnel) Définit le taux de rafraîchissement (en Hz).
Si l'écran ne supporte pas ce taux de rafraîchissement, alors OpenScreen() échouera.

La fonction ExamineScreenModes() permet d'obtenir la liste des taux de rafraîchissement supportés par le matériel.

Note: Sous Windows, le taux de rafraîchissement peut être bloqué par le système ou par les pilotes vidéo. Le résultat de cette fonction n'est donc pas forcément fiable.

Valeur de retour

Renvoie une valeur non nulle si l'écran a été créé avec succès, zéro sinon.

Remarques

L'écran est créé avec deux buffers vidéo, ce qui permet l'affichage successif des deux buffers avec la fonction FlipBuffers(), particulièrement utile pour les jeux.

Pour ouvrir un écran à l'intérieur d'une fenêtre, il convient d'utiliser la commande OpenWindowedScreen().

Il n'est pas possible d'utiliser la bibliothèque Requester dans un écran.

Exemple

 ;ATTENTION le retour vers le bureau (ALT+TAB) n'est pas géré dans cet exemple.

 ;Initialisation des sprites, du clavier et de la souris 
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
  MessageRequester("Erreur", "Impossible d'initialiser l'écran.")
  End
EndIf

 ;Ouverture de l'écran
If OpenScreen(800,600,32,"Exemple OpenScreen") = 0
  MessageRequester("Erreur", "Impossible d'ouvrir l'écran.")
  End
EndIf

 ;Curseur de la souris
CreateSprite(0,20,20,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(0))
Box(0, 0, 20, 20, RGB(255, 255, 255))
StopDrawing()

 ;Afficheur "Survoler pour quitter"
CreateSprite(1,200,100,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(1))
Box(0, 0, 200, 100, RGB(255, 255, 0))
DrawText(10,25,"Survoler pour quitter",RGB(255,255,255), RGB(255,0,0))
StopDrawing()

 ;Boucle principale
Repeat
  
  ;Effacer complètement l'écran et afficher un fond gris
  ClearScreen(RGB(128,128,128))
  
  ;On lit les évènements clavier et souris
  ExamineMouse()
  ExamineKeyboard()
  
  ;Position de la souris
  x = MouseX()
  y = MouseY()
  
  ;Affichage du curseur de la souris en temps réel
  DisplaySprite(0, X, Y)
  ;Affichage de l'afficheur "Survoler pour quitter"
  DisplaySprite(1, 500, 50)
  
  ;Détection de collision entre le curseur de la souris et l'afficheur
  If SpriteCollision(0, X, Y, 1, 500, 50) <> 0
    End ; Si collision alors on ferme le programme
  EndIf 
  
  ;Calcul du FPS  (image par seconde)
  FPS_Counter + 1
  If FPS_Counter >= FPS
    FPS = FPS_Counter * 1000 / (ElapsedMilliseconds() - FPS_ElapsedTime)
    FPS_Counter = 0
    FPS_ElapsedTime = ElapsedMilliseconds()
  EndIf
  
  ;Affichage du FPS et du texte
  StartDrawing(ScreenOutput())
  DrawText(0, 0, "FPS : " + StrD(FPS, 1))
  DrawText(0, 75, "Appuyez sur ESC pour quitter",RGB(0,0,0), RGB(255,255,255))
  DrawText(0, 550, "Appuyez sur les touches fléchées du clavier tout en bougeant la souris",RGB(255,0,0), RGB(0,255,0))
  StopDrawing()
  
  ;Gestion des 4 touches fléchées du clavier
  If KeyboardPushed(#PB_Key_Right)
    RotateSprite(0,45,#PB_Relative)
  EndIf
  If KeyboardPushed(#PB_Key_Left)
    RotateSprite(0,1,#PB_Relative)
  EndIf
  If KeyboardPushed(#PB_Key_Up)
    ZoomSprite(0,100,100)
  EndIf
  If KeyboardPushed(#PB_Key_Down)
    ZoomSprite(0,20,20)
  EndIf
  
  ;Maintenant que tout est calculé et affiché dans le buffer invisible,
  ;on inverse les buffers pour rendre la scène visible à l'écran.
  FlipBuffers()
  
Until KeyboardPushed(#PB_Key_Escape) ;On quitte l'application en  appuyant sur la touche Echap (ESC)

 ; Idée   : Remplacer la ligne de code : If OpenScreen(800,600,32,"Exemple OpenScreen") = 0
 ; par    : If OpenScreen(800,600,32,"Exemple OpenScreen", #PB_Screen_NoSynchronization) = 0
 ; ou par : If OpenScreen(800,600,32,"Exemple OpenScreen", #PB_Screen_SmartSynchronization) = 0
 ; et observez le FPS ainsi que la qualité de l'image (bouger la souris)

Voir aussi

OpenWindowedScreen(), FlipBuffers()

OS Supportés

Tous

<- NextScreenMode() - Screen Index - OpenWindowedScreen() ->