Adventure Games Studio fr
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.


Forum d'entraide à la création de jeux d'aventure
 
PortailAccueilRechercherS'enregistrerConnexion
Le Deal du moment : -29%
Jeu d’ambiance Dobble
Voir le deal
7.12 €

 

 Éviter la superposition de plusieurs sons lancés sucessivement

Aller en bas 
AuteurMessage
Ravaillac
Cliqueur Emérite
Cliqueur Emérite
Ravaillac

Nombre de messages : 557

Age : 36

Localisation : Montpellier

Date d'inscription : 16/07/2006


Éviter la superposition de plusieurs sons lancés sucessivement Empty
MessageSujet: Éviter la superposition de plusieurs sons lancés sucessivement   Éviter la superposition de plusieurs sons lancés sucessivement EmptyDim 3 Mai 2020 - 15:01

Bonjour.

J'ai tenté de me faire un peu la main sur les fonctions aléatoires car je sens bien que je vais avoir besoin de ça si je veux mettre un peu plus de vie dans mon jeu. Ainsi, chaque fois que je presse F1 sur le clavier je souhaite avoir un son de sifflet différent. J'ai donc ajouté ça à la fin des fonctions "function on_key_press(eKeyCode keycode) " dans mon globalscript (Je précise que je suis parti d'un Empty game).

Code:
}
  else if (keycode == eKeyCtrlA)
  {
    // Ctrl-A will show walkable areas
    Debug(2, 0);
  }
  else if (keycode == eKeyCtrlX)
  {
    // Ctrl-X will let the player teleport to any room
    Debug(3, 0);
  }
  else if (keycode == eKeyF1)
  {
    int alea=Random(5);
    if (alea==0) aSifflet01.Play();
    if (alea==1) aSifflet02.Play();
    if (alea==2) aSifflet03.Play();
    if (alea==3) aSifflet04.Play();
    if (alea==4) aSifflet05.Play();
    if (alea==5) aSifflet06.Play();
  }
  }

A priori, j'y suis plus ou moins arrivé, dans la mesure où lors du test ça siffle donc aléatoirement. Cependant si j'appuie plusieurs fois d'affilée sur F1, les sons se superposent dégueulassement... Je ne sais absolument pas si cela vient du fait que je ne sais pas où mettre mes accolades exactement (et que donc je n'en ai pas mis (sur un malentendu...)) ou si cela vient du fait que je ne sais pas comment dire à AGS de me faire une pause pendant le son.

Si vous voulez bien éclairer ma lanterne, je vous en remercie ! sourire

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Éviter la superposition de plusieurs sons lancés sucessivement Empty
MessageSujet: Re: Éviter la superposition de plusieurs sons lancés sucessivement   Éviter la superposition de plusieurs sons lancés sucessivement EmptyDim 3 Mai 2020 - 20:00

Je me permet de déplacer ton message dans un nouveau sujet dans la mesure où la question est assez autonome par rapport au sujet de l'aléatoire. N'hésite pas à créer un nouveau sujet dans ce cas là.

AGS dispose de 5 canaux audio pour les effets sonores, comme indiqué sur cette page (section "Priorité des canaux"). À chaque fois que tu lance un clip audio, AGS détermine un des canaux où jouer le son. Si le canal est déjà occupé au lancement du son, alors il en cherche un autre pour jouer le nouveau son, donc si la commande Play est appelée plusieurs fois de suite, les sons se superposent. Pour éviter ça tu peux essayer la chose suivante :

En haut de ton global_script, là où tu définis tes variables globales :
Code:
// main global script file
AudioChannel* Sifflet;

Cela créera un pointeur renvoyant à un canal audio, "Sifflet" étant le nom du pointeur (c'est une variable et ça fonctionne pareil, sauf que là où int renvoie un nombre entier, AudioChannel* renvoie un canal audio utilisé par AGS).

Ensuite à la place de :
Code:
if (alea==0) aSifflet01.Play();

tu écris :
Code:
if (alea==0) Sifflet = aSifflet01.Play();

Ce qui, en plus de lancer le clip audio, devrait stocker le canal dans lequel il est joué dans le pointeur "Sifflet". Fais de même pour les 6 lignes concernées.

Puis, au début de la condition appelée au moment où le joueur appuie sur F1, ajoute ceci :
Code:
Sifflet.Stop();

De cette manière, si le son est encore en train d'être joué au moment où tu appuies à nouveau sur F1, alors il s'arrêtera avant de lancer le nouveau. Au final, l'ensemble de la condition va ressembler à ça :
Code:
else if (keycode == eKeyF1)
  {
    Sifflet.Stop();
    int alea=Random(5);
    if (alea==0) Sifflet = aSifflet01.Play();
    if (alea==1) Sifflet = aSifflet02.Play();
    if (alea==2) Sifflet = aSifflet03.Play();
    if (alea==3) Sifflet = aSifflet04.Play();
    if (alea==4) Sifflet = aSifflet05.Play();
    if (alea==5) Sifflet = aSifflet06.Play();
  }

Ça fait un certain temps que je n'ai pas manipulé les fonctions audio dans AGS, je ne suis pas sûr à 100% que ça va fonctionner en l'état, mais a priori c'est proche de ce qu'il faut faire.

Edit : Il est possible que la commande "Stop" ne plaise pas à AGS si aucun son n'est joué au moment où elle est appelée. Dans ce cas, au lieu de simplement écrire "Sifflet.Stop();", ajoute ceci :
Code:
if (Sifflet.IsPlaying) Sifflet.Stop();

Mais attention ! Cela stoppera n'importe quel son joué sur le canal, pas uniquement s'il s'agit du son de sifflet !

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
Ravaillac
Cliqueur Emérite
Cliqueur Emérite
Ravaillac

Nombre de messages : 557

Age : 36

Localisation : Montpellier

Date d'inscription : 16/07/2006


Éviter la superposition de plusieurs sons lancés sucessivement Empty
MessageSujet: Re: Éviter la superposition de plusieurs sons lancés sucessivement   Éviter la superposition de plusieurs sons lancés sucessivement EmptyDim 3 Mai 2020 - 21:48

Bon bah ça me met un message d'erreur "null pointer referenced" au moment où j'appuie sur F1, quelle que soit la solution proposée. confus

Citation :
Mais attention ! Cela stoppera n'importe quel son joué sur le canal, pas uniquement s'il s'agit du son de sifflet !

C'est un peu embêtant ça. Car pour ce que j'ai prévu c'est un son comme un autre, qui se mélange à la musique d'ambiance.

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Éviter la superposition de plusieurs sons lancés sucessivement Empty
MessageSujet: Re: Éviter la superposition de plusieurs sons lancés sucessivement   Éviter la superposition de plusieurs sons lancés sucessivement EmptyDim 3 Mai 2020 - 22:17

Alors essaye ça :
Code:
if (Sifflet != null && Sifflet.IsPlaying) Sifflet.Stop();

@Ravaillac a écrit:

C'est un peu embêtant ça. Car pour ce que j'ai prévu c'est un son comme un autre, qui se mélange à la musique d'ambiance.

Oui mais si tu as bien importé ta musique dans le dossier "Music" et tes sifflets dans le dossier "Sounds" ça ne sera pas un problème, car les musiques utilisent un canal dédié, donc "Sifflet" ne renverra jamais un canal où une musique est jouée. clin d'oeil

D'ailleurs maintenant que j'y pense, il serait peut-être plus clair de nommer le pointeur "CanalSifflet" ou "SiffletCanal", pour pas s'emmêler les pinceaux, mais bon après tu nommes tes variables comme tu l'entends de toute façon.

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
Ravaillac
Cliqueur Emérite
Cliqueur Emérite
Ravaillac

Nombre de messages : 557

Age : 36

Localisation : Montpellier

Date d'inscription : 16/07/2006


Éviter la superposition de plusieurs sons lancés sucessivement Empty
MessageSujet: Re: Éviter la superposition de plusieurs sons lancés sucessivement   Éviter la superposition de plusieurs sons lancés sucessivement EmptyLun 4 Mai 2020 - 2:34

Citation :
Oui mais si tu as bien importé ta musique dans le dossier "Music" et tes sifflets dans le dossier "Sounds" ça ne sera pas un problème, car les musiques utilisent un canal dédié

Ah ! Cool.

Je viens d'essayer ton dernier code, ça marche ! les sons ne se superposent pas ! Merci.

Par contre F1 interrompt celui en cours... Et ce n'est pas non plus ce que je souhaite. Ce que je recherche c'est plutôt une sorte de pause pendant que tout le son est joué, un peu comme quand le personnage se déplace en direction d'un hotspot.

Mais merci quand même !

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
Ravaillac
Cliqueur Emérite
Cliqueur Emérite
Ravaillac

Nombre de messages : 557

Age : 36

Localisation : Montpellier

Date d'inscription : 16/07/2006


Éviter la superposition de plusieurs sons lancés sucessivement Empty
MessageSujet: Re: Éviter la superposition de plusieurs sons lancés sucessivement   Éviter la superposition de plusieurs sons lancés sucessivement EmptyLun 4 Mai 2020 - 8:28

En fait j'ai essayé d'appeler un == eblock après le dernier code que tu as publié (et evidemment suivi du point virgule), mais j'ai lu dans le manuel qu'il fallait que je place cela dans la function repeatedly_execute() pour que cela fonctionne. Cependant je reçois un message d'erreur et ne peux pas lancer le test car je galère à mettre ce nouveau code avec des accolades correctes ><

Il faut dire qu'il y a déjà ce code...

Code:
// called on every game cycle, except when the game is blocked
function repeatedly_execute()
{
  if (mouse.y > gInventaire.Height + 165){
  gInventaire.Visible = false;
  gBille.Visible = true;
}
  else if (mouse.x > gInventaire.Width + 350){
  gInventaire.Visible = false;
  gBille.Visible = true;
}
}

...Et donc je ne sais pas comment mettre qu'il y a aussi cette histoire de sifflet en plus de ça.

Et pas moyen de trouver comment gérer ce "problème". confus
Quelqu'un pourrait-il m'expliquer comment manipuler ces petites coquines d'accolades? Merci

EDIT=

Voilà mon foutoir

Code:
function repeatedly_execute()
{
if (IsGamePaused () == 1) return;
{
  if (mouse.y > gInventaire.Height + 165){
  gInventaire.Visible = false;
  gBille.Visible = true;
}
  else if (mouse.x > gInventaire.Width + 350){
  gInventaire.Visible = false;
  gBille.Visible = true;
  }
  else if (keycode == eKeyF1)
  {
    if (Sifflet != null && Sifflet.IsPlaying) Sifflet.Stop();
    int alea=Random(5);
    if (alea==0) Sifflet = aSifflet01.Play();
    if (alea==1) Sifflet = aSifflet02.Play();
    if (alea==2) Sifflet = aSifflet03.Play();
    if (alea==3) Sifflet = aSifflet04.Play();
    if (alea==4) Sifflet = aSifflet05.Play();
    if (alea==5) Sifflet = aSifflet06.Play();
  }  
}
}

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Éviter la superposition de plusieurs sons lancés sucessivement Empty
MessageSujet: Re: Éviter la superposition de plusieurs sons lancés sucessivement   Éviter la superposition de plusieurs sons lancés sucessivement EmptyLun 4 Mai 2020 - 14:52

Alors, d'abord je ne sais pas exactement ce que tu voulais faire en mettant quelque part "== eblock", mais eblock est un paramètre que tu peux/dois entrer uniquement dans certaines fonctions spécifiques, donc tu ne peux pas l'utiliser n'importe où.

keycode est une variable qui est déclarée ici :
Code:
// called when a key is pressed
function on_key_press(eKeyCode keycode)

Autrement dit, en l'état tu ne peux pas l'utiliser ailleurs que dans la fonction on_key_press. Mais nul besoin de déplacer ton bloc de code de la touche F1.

Ce que tu veux faire, contrairement à ce que j'ai proposé, c'est non pas stopper l'éventuel son en cours pour jouer le nouveau, mais au contraire ne pas jouer de nouveau son si un autre est déjà en cours.

Donc, vulgairement, au lieu de dire à AGS :
"Si le canal audio 'Sifflet' ne vaut pas null et si le canal audio 'Sifflet' est occupé par un clip audio en cours de lecture, alors je veux que tu stoppe le clip audio en cours de lecture"

Tu veux plutôt lui dire :
"Si le canal audio 'Sifflet' ne vaut pas null et si le canal audio 'Sifflet' est occupé par un clip audio en cours de lecture, alors ne joue pas de nouveau clip audio"

Ici, "ne joue pas de clip audio" peut se traduire par "ne fais rien du tout" (car pour que AGS joue un clip audio encore faut-il lui demander de le faire). Et une manière de dire à AGS de ne faire "rien du tout", donc ne pas tenir compte des instructions indiquées plus bas dans la fonction est le mot-clé return. Ce mot clé indique que la fonction s'arrête ici et qu'il peut donc sauter tout le code jusqu'à l'accolade de fin de fonction.

Donc tout simplement :
Code:
 if (Sifflet != null && Sifflet.IsPlaying) return;
Interrompra la fonction on_key_press pour ce cycle si un son est déjà joué sur le canal. Encore une fois, si tu utilises d'autres bruitages, il est possible que la touche F1 ne joue aucun son si un autre est en cours, et pas seulement un bruit de sifflet. Si vraiment tu veux appliquer la vérification uniquement aux coups de sifflet, alors le plus simple dans le cas présent est de vérifier qu'aucun des sons de sifflet que tu as utilisé n'est actuellement en train d'être joué. Pour ça tu peux faire appel à PlayingClip :

Code:
if (Sifflet != null){
    if (Sifflet.PlayingClip == aSifflet01 || Sifflet.PlayingClip == aSifflet02 || Sifflet.PlayingClip == aSifflet03 || Sifflet.PlayingClip == aSifflet04 || Sifflet.PlayingClip == aSifflet05 || Sifflet.PlayingClip == aSifflet06) return
}

L'opérateur logique "||" signifie "ou". Donc traduction du code précédent :
"Si le canal audio 'Sifflet' ne vaut pas null, alors, si le clip audio actuellement joué sur le canal audio 'Sifflet' est aSifflet01 ou, si le clip audio actuellement joué sur le canal audio 'Sifflet' est aSifflet02 ou [...] aSifflet06, alors fin de fonction, on n'a plus rien à faire ici pour ce coup là."

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
Ravaillac
Cliqueur Emérite
Cliqueur Emérite
Ravaillac

Nombre de messages : 557

Age : 36

Localisation : Montpellier

Date d'inscription : 16/07/2006


Éviter la superposition de plusieurs sons lancés sucessivement Empty
MessageSujet: Re: Éviter la superposition de plusieurs sons lancés sucessivement   Éviter la superposition de plusieurs sons lancés sucessivement EmptyLun 4 Mai 2020 - 15:24

@valoulef a écrit:
Alors, d'abord je ne sais pas exactement ce que tu voulais faire en mettant quelque part "== eblock", mais eblock est un paramètre que tu peux/dois entrer uniquement dans certaines fonctions spécifiques, donc tu ne peux pas l'utiliser n'importe où.

En fait je souhaite que pendant un son de sifflet le curseur change temporairement d'apparence, et que le jeu soit suspendu le temps du son, un peu de la même manière que lorsque le personnage part en mode look vers un hotspot (réglage par défaut dans le general settings il me semble), c'est un peu comme une pause très courte.

Sinon merci de te démener comme ça, c'est cool !! clin d'oeil

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Éviter la superposition de plusieurs sons lancés sucessivement Empty
MessageSujet: Re: Éviter la superposition de plusieurs sons lancés sucessivement   Éviter la superposition de plusieurs sons lancés sucessivement EmptyLun 4 Mai 2020 - 15:28

@Ravaillac a écrit:

En fait je souhaite que pendant le son de sifflet le curseur change temporairement d'apparence, et que le jeu soit suspendu le temps du son, un peu de la même manière que lorsqu'il part en mode look vers un hotspot (réglage par défaut dans le general settings il me semble), c'est un peu comme une pause très courte.

Dans ce cas là, il faut plutôt faire appel à la commande Wait, que tu peux mettre dans ta condition pour la touche F1 dans la fonction on_mouse_click.

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
Ravaillac
Cliqueur Emérite
Cliqueur Emérite
Ravaillac

Nombre de messages : 557

Age : 36

Localisation : Montpellier

Date d'inscription : 16/07/2006


Éviter la superposition de plusieurs sons lancés sucessivement Empty
MessageSujet: Re: Éviter la superposition de plusieurs sons lancés sucessivement   Éviter la superposition de plusieurs sons lancés sucessivement EmptyLun 4 Mai 2020 - 15:43

Euh désolé mais j'ai pas compris. confus

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
Ravaillac
Cliqueur Emérite
Cliqueur Emérite
Ravaillac

Nombre de messages : 557

Age : 36

Localisation : Montpellier

Date d'inscription : 16/07/2006


Éviter la superposition de plusieurs sons lancés sucessivement Empty
MessageSujet: Re: Éviter la superposition de plusieurs sons lancés sucessivement   Éviter la superposition de plusieurs sons lancés sucessivement EmptyLun 4 Mai 2020 - 15:45

Tu veux dire un truc du genre "si f1 est tapé... wait sur onmouseclick" ?

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Éviter la superposition de plusieurs sons lancés sucessivement Empty
MessageSujet: Re: Éviter la superposition de plusieurs sons lancés sucessivement   Éviter la superposition de plusieurs sons lancés sucessivement EmptyLun 4 Mai 2020 - 15:59

Oups, autant pour moi, j'ai voulu dire on_key_press. Tu peux le faire à la toute fin de ton bloc pour la touche F1, par exemple. Note que tant que le jeu sera en pause, toute pression de la touche F1 (comme des autres touches) devrait être ignoré, donc ça peut te servir pour empêcher le joueur d'appuyer plusieurs fois de suite trop rapidement sur F1, à la place de ce que j'ai suggéré plus haut.

Si tu veux que la durée de cette pause corresponde pile à la durée du clip audio, tu peux récupérer cette durée avec LengthMs (je vais t'expliquer comment faire mais faut que je réfléchisse 2 minutes ^^)
Edit : est-ce que c'est ce qui t'intéresse, déjà ?

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
Ravaillac
Cliqueur Emérite
Cliqueur Emérite
Ravaillac

Nombre de messages : 557

Age : 36

Localisation : Montpellier

Date d'inscription : 16/07/2006


Éviter la superposition de plusieurs sons lancés sucessivement Empty
MessageSujet: Re: Éviter la superposition de plusieurs sons lancés sucessivement   Éviter la superposition de plusieurs sons lancés sucessivement EmptyLun 4 Mai 2020 - 16:13

Oui c'est exactement cela que je veux faire. sourire

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef

Nombre de messages : 1721

Age : 31

Localisation : Condate

Date d'inscription : 01/08/2011


Éviter la superposition de plusieurs sons lancés sucessivement Empty
MessageSujet: Re: Éviter la superposition de plusieurs sons lancés sucessivement   Éviter la superposition de plusieurs sons lancés sucessivement EmptyLun 4 Mai 2020 - 17:10

Donc reprenons. Tu veux que, lorsque le son est joué, le jeu marque une pause d'une durée égale à celle du son joué. On a déjà noté le canal utilisé pour jouer le son, donc on peut le récupérer pour faire appel à LengthMs, et ainsi récupérer la durée du clip pour l'appliquer à Wait. Seulement,  LengthMs utilise comme unité des millisecondes tandis que la valeur n de Wait(n) s'exprime en nombre de cycles. Il faut donc convertir la durée du clip en cycles. Pour ça on peut diviser la valeur retournée par LengthMs par 1000 / Nombre de cycles par secondes. Dans ton cas, le nombre de cycles par seconde est normalement de 40, mais comme cette valeur est une variable dans AGS, autant l'utiliser. Cette valeur est retournée par GetGameSpeed (si on veut la modifier, il faut en revanche passer par SetGameSpeed).

Ce qui va nous donner tout "simplement" :
Code:
int DureeClipCycles = Sifflet.LengthMs/(1000/GetGameSpeed()) + 1;
Wait(DureeClipCycles);

J'ai ajouté 1 à la durée en cycles, à cause des arrondis (rappelons qu'un int est toujours un nombre entier, donc lors de divisions la valeur est toujours arrondie à l'entier inférieur).

Ton bloc devrait donc ressembler à ça :
Code:
 else if (keycode == eKeyF1)
  {
    int alea=Random(5);
    if (alea==0) Sifflet = aSifflet01.Play();
    if (alea==1) Sifflet = aSifflet02.Play();
    if (alea==2) Sifflet = aSifflet03.Play();
    if (alea==3) Sifflet = aSifflet04.Play();
    if (alea==4) Sifflet = aSifflet05.Play();
    if (alea==5) Sifflet = aSifflet06.Play();

    int DureeClipCycles = Sifflet.LengthMs/(1000/GetGameSpeed()) + 1;
    Wait(DureeClipCycles);
  }

J'ai viré tout ce qu'on avait mis au dessus car avec le Wait, normalement ça devient obsolète.

Si jamais tu as besoin de lancer un son bloquant à de nombreux endroit de ton script, tu pourrais créer une petite fonction personnalisée pour pouvoir faire un truc du genre aSifflet01.PlayBlock(); qui lancerait le clip tout en bloquant l'execution du script le temps de la lecture. clin d'oeil

Une remarque un peu hors-sujet mais pendant que j'y pense. Si tu veux mieux percevoir la logique du script, tu peux utiliser les options de Debug Mode. Sélectionne une ligne de ton script avec F9 (par exemple la fonction game_start()) puis fais défiler ligne par ligne avec F11. Tu pourras voir un peu comment AGS scanne ton code, puis si tu peux, essayer un peu de calculer dans ta tête l'évolution des variables au fur et à mesure. C'est une manière de se mettre "à la place" du programme qui peut permettre de mieux comprendre son fonctionnement (en tout cas ça marche pas mal pour moi).

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
Ravaillac
Cliqueur Emérite
Cliqueur Emérite
Ravaillac

Nombre de messages : 557

Age : 36

Localisation : Montpellier

Date d'inscription : 16/07/2006


Éviter la superposition de plusieurs sons lancés sucessivement Empty
MessageSujet: Re: Éviter la superposition de plusieurs sons lancés sucessivement   Éviter la superposition de plusieurs sons lancés sucessivement EmptyLun 4 Mai 2020 - 17:18

Ahaha ça fonctionne taille de nickel chrome, génial !!

Merci beaucoup, je ne serais jamais arrivé à trouvé ça tout seul confus

Merci également pour l'astuce du debug !... Je pense que j'y aurais recours pas mal de fois sourire sourire

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
Ravaillac
Cliqueur Emérite
Cliqueur Emérite
Ravaillac

Nombre de messages : 557

Age : 36

Localisation : Montpellier

Date d'inscription : 16/07/2006


Éviter la superposition de plusieurs sons lancés sucessivement Empty
MessageSujet: Re: Éviter la superposition de plusieurs sons lancés sucessivement   Éviter la superposition de plusieurs sons lancés sucessivement EmptyLun 4 Mai 2020 - 17:20

Pour la fonction personnalisée... J'avais déjà calé cette page dans mes favoris !!

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
Contenu sponsorisé




Éviter la superposition de plusieurs sons lancés sucessivement Empty
MessageSujet: Re: Éviter la superposition de plusieurs sons lancés sucessivement   Éviter la superposition de plusieurs sons lancés sucessivement Empty

Revenir en haut Aller en bas
 
Éviter la superposition de plusieurs sons lancés sucessivement
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Connexion d'un tag sur plusieurs hotspots...
» Les " SONS OF KHORNE"
» Produits à éviter
» La kick en... plusieurs leçons
» Forces de frappe des SONS' OF KHORNE

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Questions / Réponses-
Sauter vers: