Avec cette variable, vous pouvez définir le contenu d'un port de vue donné pour dessiner sur une surface, ou obtenir l'identifiant de surface actuel s'il a été affecté à un port de vue. Lorsque vous travaillez avec des surfaces, il est souvent nécessaire que vous capturiez toute la zone visible de l'écran à la surface, et que vous l'affecteriez donc à un port de vue à l'aide de cette variable. Cela signifie que tout ce qui est montré dans la vue choisie sera maintenant dessiné sur la surface assignée. La vue ne sera plus dessinée à l'écran, ce qui signifie que vous devrez:
- Activer une nouvelle vue et dessiner la surface uniquement dans cette vue (en utilisant view_current pour vérifier quelle vue est dessinée)
- Dessinez la surface dans l'événement Draw GUI d'une instance, car la couche GUI est indépendante des vues.
Vous pouvez également lire cette variable pour obtenir l'index de la surface qui a été assignée à la vue choisie ou elle retournera -1 si aucune surface n'a été affectée, et généralement la surface utilisée pour cette fonction devrait être la taille de la caméra de vue lui-même (pas le port de vue). L'exemple étendu ci-dessous montre une configuration de base pour capturer une vue et la dessiner dans l'événement Draw GUI, et pour plus d'informations sur les surfaces, voir la section Surfaces.
Notez que vous pouvez également définir un port de vue sur une surface à l'aide de la fonction view_set_surface_id().
view_surface_id[0...7];
Real (surface index or -1 if no surface has been assigned)
Dans cet exemple étendu, nous allons créer une surface et l'assigner pour voir le port [0] afin qu'il capture la vue de la caméra assignée à ce port, puis dessine cela à l'écran dans l'événement Draw GUI. Pour commencer, nous devons initialiser notre variable de surface dans l' événement Create d'une instance de contrôleur:
surf = -1;
Nous définissons la variable de surface sur -1, car toutes les fonctions de surface doivent être réellement utilisées dans les événements Draw pour éviter les erreurs impaires ou les comportements indéfinis. Donc, avec cela fait, nous aurions alors cela dans l'événement principal Draw:
if !surface_exists(surf)
{
surf =
surface_create(camera_get_view_width(view_camera[0]),
camera_get_view_height(view_camera[0]));
view_surface_id[0] = surf;
}
Les surfaces sont volatiles, ce qui signifie qu'elles peuvent être supprimées de la mémoire à tout moment en raison de la gestion de la mémoire du système d'exploitation. Nous vérifions ici si notre surface existe et si ce n'est pas le cas, nous l'assignons à la vue 0. Avec cela fait, tout ce qui apparaîtrait dans la vue 0 sera maintenant dessiné à la surface que nous avons créée à la place. Si vous ne faites rien d'autre à ce stade, lorsque vous lancez votre jeu, vous obtiendrez simplement un écran vide car tout le dessin est fait en surface, mais la surface elle-même n'est dessinée nulle part. Par conséquent, nous devons maintenant dessiner la surface à l'écran dans l'événement Draw GUI comme ceci:
if surface_exists(surf)
{
draw_surface_stretched(surf, 0, 0,
display_get_gui_width(), display_get_gui_height());
}
Ce code va maintenant dessiner la surface que nous avons créée à partir de la caméra de vue étirée pour remplir toute la couche GUI.