Création de jeux avec Game Maker
Réaffichage de l'Ecran
La room est redessinée habituellement sur l'écran à la fin de chaque step. Mais dans de rares circonstances, vous devrez redessiner la room à d'autres moments. Cela arrive par exemple lorsque votre programme prend le contrôle total des opérations. Ainsi, avant une mise en veille prolongée, il sera sans doute nécessaire de redessiner l'écran. De plus, si votre programme affiche un message et demande au joueur de taper sur une touche, il sera indispensable de rafraîchir l'affichage de l'écran entre ces 2 opérations. Il existe deux routines différentes pour effectuer le rafraîchissement de l'affichage de l'écran.
screen_redraw() Réaffiche la room en appelant tous les événements d'affichage (draw events).
screen_refresh() Rafraîchit l'écran en utilisant l'image actuelle de la room (n'invoque pas les événements d'affichage).
Pour bien comprendre la deuxième fonction, il vous est nécessaire de connaître davantage le fonctionnement interne de l'affichage sur écran. Intrinséquement, tous les affichages se déroulent sur une seule image. Cette image n'est pas visible à l'écran. Uniquement à la fin de chaque step, après que toutes les opérations d'affichage soient terminées, l'image affichée à l'écran est remplacée par cette image interne (c'est ce que l'on appelle le double buffering). La première fonction redessine l'image interne et rafraîchit l'image à l'écran. La seconde fonction ne rafraîchit que l'image affichée à l'écran.
Maintenant, vous devriez mieux comprendre pourquoi vous ne pouvez pas utiliser des actions ou des fonctions d'affichage ailleurs que dans des événements d'affichage (drawing events). Les autres événements affichent ou dessinent des choses dans l'image interne mais ces dernières ne seront pas visibles à l'écran. Et lorsque les événements d'affichage sont exécutés, la room d'arrière-plan est affichée en premier plan, effaçant tout ce qui aurait pu être dessiné sur l'image interne. Mais quand vous utilisez la commande screen_refresh() après avoir dessiné quelque chose, l'image réactualisée sera visible sur l'écran à ce moment là. Ainsi, par exemple, un script pourra afficher sur l'écran du texte, appeler la fonction de rafraîchissement puis attendre que le joueur appuie sur une touche. Le code ci-dessous illustre cet exemple.
{ draw_text(screen_width/2,100,'Press any key to continue.'); screen_refresh(); keyboard_wait(); }
Veuillez bien comprendre que lorsque vous dessinez ailleurs que dans un événement d'affichage (drawing event), vous dessinez en fait simplement sur l'image et non pas dans une vue ! (bien que les coordonnées utilisées soient les mêmes comme s'il n'y avait pas de vue). Soyez prudent lors de l'utilisation de cette technique. Assurez-vous que vous avez bien assimilé les notions d'affichage et ayez en tête que le rafraîchissement d'écran prend du temps.
Lorsque vous dessinez par vous-même la room, cela peut être utile de NE PAS laisser Game Maker le faire automatiquement à votre place. Par exemple, vous pourrez désirer dessiner la room tous les 5 steps. Vous utiliserez alors les fonctions suivantes :
set_automatic_draw(value) Indique si l'affichage de la room doit se faire en automatique (valeur true par défaut) ou non (false).
Enfin, une fonction existe avec laquelle vous pourrez synchroniser l'affichage avec la fréquence de rafraîchissement de votre moniteur :
set_synchronization(value) Indique que la synchronisation de l'affichage doit se faire avec la fréquence de rafraîchissement du moniteur.
Vous avez la possibilité de forcer un temps d'attente avec la prochaine synchronisation verticale en utilisant la fonction suivante :
screen_wait_vsync() Attends la prochaine synchronisation verticale du moniteur.
<< Traduction française par Philippe Ragni - (2005) >>
Alternative versions
Also available in:
Download helpfile