- Gob a écrit:
- Si tu peux utiliser ça pour fondre l'apparition et la disparition d'un objet (voire un character), dis le moi.
Oui, bien-sûr ! Tu peux faire à peu près ce que tu veux. Mais si tu veux te pencher plus sur le sujet, je vais commencer par essayer de t'expliquer plus en détail le fonctionnement de la fonction que je t'ai donnée, parce que c'est toujours mieux de comprendre ce qu'on fait. Je vais essayer surtout de rendre les choses le plus clair possible mais il se peut que je n'utilise pas toujours les termes exacts, je ne suis pas non plus un pro de la programmation.
Comme je ne connais pas du tout tes connaissances je détaille le plus possible, mais je me rends bien compte que ça peut rester un peu obscure si tu ne maîtrise pas du tout certaines notions qui vont suivre. C'est pas grave, prend ce que tu veux, ce sera toujours mieux que rien.
Prenons les choses dans l'ordre dans lequel le programme interprète le code. D'abord, il va tomber sur cette ligne là, quelque part :
- Code:
-
aMonClip.StopFadeOut(3, 0);
Là, il voit qu'il doit appliquer une fonction nommée "StopFadeOut" à l'élément "aMonClip" qu'on sait être un
AudioClip. Il va alors rechercher les instructions qu'il doit appliquer lorsqu'il tombe sur cette fonction, et va donc rechercher cette ligne là :
- Code:
-
function StopFadeOut(this AudioClip*, int VitesseFadeOut, int VolumeStop){
Le mot-clé "function" permet de déclarer une fonction que j'ai nommée arbitrairement
StopFadeOut. Dans les parenthèses, on note le type d'élément auquel s'applique la fonction (le cas échéant, mais une fonction peut aussi ne pas s'appliquer à un élément en particulier), précédé du mot-clé
this. L'astérisque permet d'identifier qu'il s'agit d'un pointeur (une variable d'un type particulier, dans AGS ça peut être par exemple
Character,
Room,
Hotspot, etc., ou ici,
AudioClip). Pour faire simple c'est ce qui s'affiche en bleu ciel dans l'éditeur. Ensuite on entre les paramètres dont on aura besoin plus tard, en l'occurrence deux entiers (
int) respectivement nommés
VitesseFadeOut et
VolumeStop.
Le programme exécute ensuite le code entre les accolades.
AGS utilise un système de canaux audio (de pistes) et c'est le volume du canal et non directement du clip que l'on peut intervenir. Il faut donc récupérer le canal sur le quel le clip qui nous intéresse est actuellement joué (si c'est bien le cas, car il peut bien-sûr aussi ne pas être joué). C'est le rôle de la ligne suivante, qui crée un pointeur "canal" contenant le canal où le clip est éventuellement joué :
- Code:
-
AudioChannel *canal = this.IsPlaying();
Là on fait appel à l'autre fonction (qui est en fait un pointeur sous la forme d'une fonction)
IsPlaying que je t'ai donnée après. Je détaille pas, il faut surtout noter que
this correspond à l'AudioClip sur lequel on travaille actuellement et qu'on lui applique cette autre fonction qui renvoie le canal sur lequel il est joué, ou
null s'il n'est joué nulle part.
Si le clip audio n'est joué nulle part, alors il n'y a rien à faire, c'est pour cela qu'on va appliquer la suite uniquement dans le cas contraire, d'où le :
- Code:
-
if (canal != null){
Ce qu'on veut pour finir, c'est baisser le volume à chaque cycle de jeu (40 fois par seconde par défaut), jusqu'à ce qu'il arrive à 0. On va donc pour cela utiliser une boucle
while qui exécute les instructions en boucle tant que sa condition est vérifiée :
- Code:
-
while (canal.PlayingClip == this){
Ce qui peut se traduire grosso modo par "tant que le clip joué sur le canal
canal est celui qui nous intéresse (
this)".
... alors on applique en boucle ce qui suit entre les accolades :
- Code:
-
if (canal.Volume > VitesseFadeOut) canal.Volume -= VitesseFadeOut;
Wait(1);
if ((canal.Volume <= VitesseFadeOut) || (canal.Volume <= VolumeStop)) canal.Stop();
Autrement dit, si le volume de
canal est supérieur au paramètre
VitesseFadeOut alors on retire autant de points à sa valeur (3 dans notre exemple).
Le
Wait(1); permet d'attendre un cycle de jeu avant de continuer, sinon tout se ferait d'un coup et on aurait pas l'effet progressif recherché.
Et ensuite, si le volume a atteint la valeur d'un des deux paramètres, alors on arrête d'y jouer le clip audio.
On recommence ensuite en haut de la boucle
while si le clip n'a pas encore été interrompu.
Voilà.
Pour faire disparaître un objet ou personnage en fondu, ce sera un peu le même principe, mais appliqué sur
Object ou
Character au lieu de
AudioClip, et sans avoir à s'embêter avec cette histoire de canal, spécifique à l'audio. À noter qu'au lieu du volume, on cherchera ici à faire varier la valeur
Transparency de l'élément.
Est-ce que tu peux commencer à voir comment faire ? Si c'est pas le cas, pas d'inquiétude je reviens vite t'aiguiller.
En espérant ne pas t'avoir embrouillé plus qu'autre chose.