-
Notifications
You must be signed in to change notification settings - Fork 10
Micro Evènements
Attention, cette feature a été complètement revue. N'hésitez pas à relire entièrement cette page.
Nuki a dit :
Si je devais donner mon avis sur la plus grosse et la plus cool des nouveautés de RME, je pense que ce serait sans aucun doute celle-ci. Bien qu'elle soit l'issue d'une fusion entre tout ce que vous avez pu lire dans les pages précédentes (Déclencheurs personnalisés, commandes et sélecteurs), les micro-évènements vous permettront d'économiser un nombre assez important d'évènements en processus parallèle, tout en gagnant en performance !
L'idée qui ressort d'un Micro-évènement est de permettre de n'exécuter des portions d'évènements que sous certaines conditions ! Par exemple, je voudrais que chaque fois que je clique sur un évènement, on affiche (au moyen de p "lol"
) "lol" dans la console. Une solution serait de faire un évènement en processus parallèle avec une boucle etc. Et il faudrait répéter ce code si on veut ce comportement pour plusieurs évènements. Avouez que ce n'est pas très commode.
Concrètement, la commande bind
permet d'associer à des évènements (au moyen d'un sélecteur), une condition de déclenchement et une portion d'évènement à exécuter si la condition de déclenchement est respectée. Pour reprendre l'exemple cité dans l'introduction, on utilisera cette commande : bind(0, :click)
. Une fois que cette commande sera exécutée, chaque fois que la condition relative à click sera remplie pour le héros (événement 0), la commande 'p "lol"' sera exécutée".
Nous allons voir maintenant quelle est la forme de cette commande un peu particulière. Concrètement, la voici :
bind(SELECTEUR, TRIGGER, *Nombre_execution)
.
- Le sélecteur n'a rien de complexe, vous pouvez vous référer à cette section
- Nom du micro event
- Nombre de fois qu'il faut exécuter l'action. Par défaut, le nombre est infini
Comme beaucoup de choses dans RME, il faut sauvegarder un micro-évènement. J'ai pris l'habitude de les sauvegarder dans un script vierge au dessus du main
. La sémantique de l'ajout d'un micro-évènement est :
store_action(:name, trigger{|id| condition sur id}){|id| action sur id}
Par exemple, si je voulais que chaque fois que l'on clique sur un évènement la console affiche son ID, on pourrait imaginer ceci :
store_action(:click_to_id, trigger{|id| mouse_click_event?(id)}){|id| p "Oh, l'évènement #{id} a été cliqué !"}
Et pour démarrer le micro-évènement. Il suffit de faire cet appel de script :
bind(all_events, :click_to_id)
Une fois que cet évènement est lancé, chaque fois qu'un évènement sera cliqué, la console affichera le message.
Par exemple, si nous désirons connaître le dernier évènement sur lequel la souris a cliqué, il suffirait de créer un écouteur sur tous les évènements :
bind(all_events, :click){|id| V[5] = id}
Chaque fois qu'un évènement sera cliqué, la variable 5 prendra l'ID de l'évènement cliqué.
Un autre exemple (un peu étrange), serait : Chaque fois que je clique sur un évènement, je veux que l'image 1 reçoive un effet miroir :
bind(all_events, :click){|id| picture_flip(1)}
Il est possible d'ajouter une durée de vie à un micro-évènement. En ajoutant un troisième paramètre au bind
, comprenant le nombre d'exécutions possibles par évènement.
Il est évident que la commande unbind
permet de délier un Micro-évènement. En effet unbind(SELECTOR)
déliera tous les Micro-évènements de tous les évènements pointés par le sélecteur. Cependant, il est possible de spécifier quel Micro-évènement délier en passant en second argument le nom du sélecteur à délier. Par exemple unibind(selector, :press)
déliera de tous les évènements pointés par le sélecteur, le Micro-évènement :press
.
- Le nom de déclencheur est obligatoire pour pouvoir supprimer l'évènement via la commande
unbind
. - Le
trigger
est identique aux déclencheurs personnalisés, si ce n'est que la variableid
permet de travailler sur l'évènement courant.
Même si l'usage des Micro-évènements peut paraître très complexe, je suis intimement convaincu qu'ils sont un véritable plus pour faciliter l'Event-Making, tout en proposant un véritable gain de performance (car ils sont plus légers à exécuter que des évènements en processus parallèles).
Ils peuvent être déclarés dans les map_onload
ou dans un évènement en processus parallèle qui se supprime après. Et peuvent réellement faire gagner beaucoup de temps.
De mon point de vue, c'est la fonctionnalité la plus novatrice de RME.
Introduction
Syntaxe revisitée
- Variables et interrupteurs
- Interrupteurs locaux et variables locales
- Labels et labels locaux
- Affichage dans les messages
Commandes
Valeurs constantes
Evènements enrichis
- Evènements relatifs aux cartes
- Déclencheurs personnalisés
- Déclencheurs en combat
- Sélecteurs
- Boucles évènementielles
- Micro Evènements
Outillage avancé
- Bases de données extensibles
- Définitions de profils et couleurs pour l'afficheur de textes à l'écran
Tutoriels
- Créer des jauges simples
- Créer un QuickTime Event facilement
- Un système d'infiltration
- Un mini système multi-agent
- Un système de saisie de nom custom
- Le passeur d'écran titre
- Créer des jauges en combat
Pour les scripteurs