Création de jeux avec Game Maker
La Désactivation des Instances
Lors de la création de rooms très vastes comme par exemple dans les jeux de plateformes et dans le cas de l'utilisation d'une vue réduite, de nombreuses instances se situent en dehors de la vue. De telles instances restent cependant toujours actives et exécutent leurs événements. Aussi, ces instances sont toujours prises en compte lors des contrôles de collision. Ceci consomme beaucoup de temps ce qui n'est pas souvent nécessaire (par exemple, il n'est pas très important de gérer les instances qui se déplacent en dehors de la vue). Pour résoudre ce problème, Game Maker fournit quelques fonctions permettant de désactiver et de réactiver des instances. Avant de pouvoir les utiliser, il est néanmoins nécessaire que vous puissiez bien comprendre leur fonctionnement.Lorsque vous désactivez des instances, celles-ci sont en quelque sorte retirées du jeu. Elles ne sont donc plus visibles nulle part et leurs événements ne sont plus exécutés. Ainsi, pour toutes les actions et fonctions, elles n'existent plus. Cela économise beaucoup de temps mais vous devrez cependant être prudent. Par exemple, si vous effacez toutes les instances d'un type particulier, les instances désactivées ne seront pas effacées (car elles n'existent plus). Aussi, ne pensez pas qu'une clé en possession d'un joueur peut ouvrir une porte désactivée si cette instance n'existe plus.
L'erreur la plus importante que vous pouvez commettre est de désactiver l'instance qui est responsable elle-même de l'activation. Pour éviter cette situation, certaines routines ci-dessous vous autorisent à préciser quelles doivent être les instances appelantes ne pouvant se désactiver par elles-mêmes.
Voici les routines disponibles :
instance_deactivate_all(notme) Désactive toutes les instances de la room. Si notme est positionné à true, l'instance appelante n'est pas désactivée (ce qui sera habituellement le résultat souhaité).
instance_deactivate_object(obj) Désactive toutes les instances de la room d'un objet donné. Vous pouvez également utiliser le mot all pour indiquer que toutes les instances doivent être désactivées ou l'ID d'une instance pour désactiver une instance particulière.
instance_deactivate_region(left, top, width, height, inside, notme) Désactive toutes les instances de la région indiquée (c'est à dire celles dont la boîte de rebond est en partie à l'intérieur de la région). Si inside vaut false , les instances totalement en dehors de la région seront désactivées. Si notme est à true, l'instance appelante ne sera pas désactivée (c'est ce que généralement vous désirerez).
instance_activate_all() Active toutes les instances de la room.
instance_activate_object(obj) Active toutes les instances de la room d'un objet donné. Vous pouvez employer le mot all pour indiquer que toutes les instances doivent être activées ou encore l'ID d'une instance pour activer cette instance individuellement.
instance_activate_region(left, top, width, height, inside) Active toutes les instances de la région indiquée. Si inside vaut false, les instance totalement en dehors de la région seront activées.
Par exemple, pour désactiver toutes les instances hors de la vue et activer celles à l'intérieur de cette vue, vous pourriez employer le code suivant dans l'événement step du personnage en déplacement :
{ instance_activate_all(); instance_deactivate_region(view_xview[0],view_yview[0], view_wview[0],view_hview[0],false,true); }
En pratique, il est préférable d'utiliser une région légérement plus grande que la vue.
<< Traduction française par Philippe Ragni - (2005) >>
Alternative versions
Also available in:
Download helpfile