Dans les événements de dessin normaux, GameMaker Studio 2 ne dessine pas directement sur l'écran, mais dessine plutôt sur une surface appelée surface de l' application. Cette surface est fondamentalement une "toile" vierge qui peut ensuite être manipulée avant d'être attirée à l'écran si nécessaire, et dans la plupart des cas, GameMaker Studio 2 gère cela pour vous (bien que vous puissiez également le manipuler vous-même dans le code pour les shaders beaucoup d'autres choses - plus de détails sont donnés ci-dessous).
Cependant, en dehors de cette surface d'application, vous pouvez également créer vos propres surfaces et les utiliser pour créer des effets spéciaux étonnants ou subtils dans votre jeu. Par exemple, vous pouvez utiliser des surfaces pour "attraper" des instances, qui peuvent ensuite être détruites. Vous pouvez ainsi créer un effet de décalque où l'image-objet de l'instance est affichée comme si elle existait encore, permettant des effets graphiques comme débris, sang, etc... sans frais généraux de traitement réel. Une autre chose que vous pouvez faire avec les surfaces est de les utiliser comme des textures à manipuler, ou de créer des sprites "à la volée", ou de créer des superpositions complexes. en fait, les utilisations pour les surfaces sont infinies!
Les surfaces normales sont assez faciles à utiliser, mais il y a quelques règles de base à suivre quand vous les utilisez:
- Tout d'abord, vous devez réaliser que les surfaces ( à l' exception de la surface d'application) sont "volatiles". Cela signifie que si l'appareil ou la fenêtre perd son focus ou est minimisé (de bons exemples sont lorsqu'un écran de veille apparaît dans Windows, ou sur un appareil Android lorsque l'application perd le focus suite à un appel), la surface peut être détruite. En effet, il est stocké dans la mémoire de texture et peut être écrasé lorsque la plate-forme cible a besoin de cette mémoire pour autre chose, ce qui signifie que vous devez toujours avoir un certain type de code de sécurité, généralement avec surface_exists fonction.
- Deuxièmement, vous devez noter que les surfaces nécessitent de grandes quantités de mémoire de texture à utiliser, et vous devriez donc essayer de les garder aussi petites que possible. Normalement, vous essaierez de ne pas dépasser la taille de la vue ou de la fenêtre d'affichage.
- Troisièmement, vous ne devez créer des surfaces que dans l'événement draw. Si vous créez une surface dans l'événement de création d'une instance, vous pouvez potentiellement obtenir le même index que le application_surface. Cela peut alors causer beaucoup de problèmes et de confusion lorsque vous pensez que vous utilisez votre propre surface, mais vous utilisez réellement la cible de rendu actuelle. Vous devriez également toujours essayer de limiter le dessin à une surface dans l'événement de dessin, car en raison de la manière optimisée dont GameMaker Studio 2 dessine à l'écran, il est recommandé de conserver toutes les fonctions de dessin dans l'événement de dessin. une surface quand elle est créée, etc... Dessiner sur une surface en dehors de l'événement draw est possible et peut même être nécessaire pour certains effets, mais ce n'est pas comme cela que cela doit être fait.
- Quatrièmement, lorsque vous dessinez manuellement sur une surface, la surface est toujours à la position (0,0). Cela signifie que vous devrez peut-être convertir les coordonnées absolues en coordonnées locales pour la surface. Par exemple, si vous avez une surface de la taille d'une vue et que vous souhaitez dessiner quelque chose qui est actuellement visible sur cette surface, vous devez soustraire les coordonnées x et y de la caméra pour obtenir une position relative par rapport à la surface (0,0) position. Donc, le code ressemblerait à ceci:
if view_current = 0
{
surface_set_target(surf);
with (obj_Effect)
{
var _vx = camera_get_view_x(view_camera[1]);
var _vy = camera_get_view_y(view_camera[1]);
draw_sprite(sprite_index, image_index, x - _vx, y - _vy);
}
surface_reset_target();
}
else
{
draw_surface(surf, 0, 0);
}
L'utilisation de base d'une surface est la suivante: vous créez d'abord une surface et affectez son index à une variable. Vous devez ensuite placer la cible de dessin sur la surface plutôt que sur l'affichage et dessiner les choses que vous souhaitez ainsi que d'effectuer d'autres manipulations. Une fois que vous avez terminé, vous réinitialisez la cible de dessin de sorte que tout autre dessin se répète à l'écran. Une chose à noter est que si vous avez besoin de dessiner tout l'affichage sur une surface (y compris les carreaux, les arrière-plans etc...) vous pouvez simplement accéder à la surface de l'application (voir plus bas) ou assigner une surface à une vue port en utilisant la variable view_surface_id[0..7] comme avec tout ce qui est visible dans cette vue, le port sera tracé sur la surface correspondante.
Les fonctions suivantes existent pour traiter les surfaces (ces fonctions sont spécifiques à la création et à la manipulation de surfaces, mais pour les dessiner à l'écran, vous devez utiliser les fonctions de dessin spécifiques que vous trouverez dans la section Dessins de surface ci-dessous):
Comme mentionné ci-dessus, tout le dessin normal dans votre jeu est fait sur la surface d'application, et cette surface peut être changée et manipulée juste comme une surface normale. Cependant, ce n'est pas une surface normale et les utilisateurs avancés trouveront qu'il permet un contrôle complet sur comment et quand les choses sont dessinées dans GameMaker Studio 2. Pour plus de détails, ainsi que des fonctions spécifiques pour cette fonctionnalité, veuillez consulter la section suivante:
Les fonctions et variables suivantes existent pour référencer la surface de l'application:
Et vous avez également quelques fonctions spéciales qui sont conçues uniquement pour une utilisation avec la surface de l'application:
Les surfaces sont un outil graphique incroyablement puissant que GameMaker Studio 2 vous fournit pour créer des effets spéciaux et une foule d'autres choses. Ils sont relativement simples à utiliser car ils sont essentiellement une toile que vous dessinez à la place de l'écran d'affichage, et cette toile peut ensuite être manipulée et modifiée avant d'être dessinée avec les fonctions de cette section.
REMARQUE: Lorsque vous travaillez avec des surfaces, il est possible qu'elles cessent d'exister à tout moment en raison de leur stockage dans la mémoire de texture. Vous devez TOUJOURS vérifier qu'une surface existe en utilisant surface_exists avant de les référencer directement.Les fonctions suivantes existent pour dessiner des surfaces: