[OK] Soucis de répétition de son au clic gauche.

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

[OK] Soucis de répétition de son au clic gauche.

Message par Ar-S »

Salut,

Lorsque je survole une zone et que je clic gauche, j'enclenche un son de "tir".
Mon soucis et que si c'est on a le doigt lourd et qu'on laisse appuyé, le son se lance plein de fois car il est très court.
J'ai essayé de régler ça en mettant la variable shot = 1 shot = 0 mais elle reste à 1 tant qu'on laisse appuyé donc ça ne change rien.
Note : Je n'utilise pas le multichannel sinon ça fait un echo trop laid.

Code : Tout sélectionner

If MouseButton(#PB_MouseButton_Left) <> 0
	Select HOVER ; Sprite survolé
		Case #SP_1,#SP_2,#SP_3,#SP_4,#SP_5
			StockTabPos(SP,#T_BALLE,MX,MY)
			Shot = 1
			If Shot = 1
				PlaySound(#FIRESHOT)
				Shot = 0
                       endif
		EndSelect
	EndIf
Reste la solution d'ajouter un blanc de qques sec à la fin de mon son pour laisser le temps au doigt de relâcher le clic mais je trouve ça un peu moche comme système.
Une idée ?
Dernière modification par Ar-S le jeu. 16/avr./2015 20:58, modifié 1 fois.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Soucis de répétition de son au clic gauche.

Message par Marc56 »

Quelques solutions à essayer:

- Brutale: Forcer l'arrêt du son par un StopSound() ?
- Technique: Mettre le PlaySound() dans un thread ?
- Bascule: Ne rien faire tant que le bouton n'est pas en position Up ?
- Rustique et souvent efficace: Comme tu l'as dis, mettre un délai ? (c'est ce qui se fait en général en électronique, d'une manière matérielle ou logicielle pour parer au phénomène du rebond avec les boutons poussoirs)

Quelques fois, un simple délai de 100 ms dans la lecture des événements suffit à les calmer :mrgreen:
(ça se voit en particulier avec les logiciels d'automation)

:wink:
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Soucis de répétition de son au clic gauche.

Message par Ollivier »

Bonjour Ar-S

A ta place, j'utiliserais l'horloge.
J'ai rajouté 2 lignes pour le multi-canal si besoin inopiné.

Code : Tout sélectionner

; init
SoundDelay = 300 ; en millisecondes

; dans la boucle principale
lap = elapsedmilliseconds()

if lap > SoundLap
  SoundIsOk = 1
endif

if Click
  if SoundIsOk
    PlayTheSound()
    SoundIsOk = 0
    SoundLap = Lap + SoundDelay
    SoundChannel + 1
    SoundChannel & 3
  endif
endif
 

logis27
Messages : 34
Inscription : lun. 17/mars/2014 8:00

Re: Soucis de répétition de son au clic gauche.

Message par logis27 »

Normal.
Ta variable "shot" est mise à 1 à chaque boucle d'appel du son.
Sa mise à 0 ne sert à rien.
Il faut mettre "shot=0" ailleurs dans ton programme par exemple en testant le relâchement du bouton par:

Code : Tout sélectionner

  ;Relachement Touche: evite les répétitions
  If KeyboardReleased(#PB_Key_All)
    shot=0
  EndIf
Dernière modification par logis27 le jeu. 16/avr./2015 16:19, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Soucis de répétition de son au clic gauche.

Message par Ar-S »

Merci pour vos solutions.
@Ollivier la tienne permet en effet de lire le son correctement, mais il se répète tout de même tant que le bouton est enfoncé.

@Marc56, détecter le relachement du bouton fait perdre tout son charme au truc, le son doit se faire entendre au clic ;)
Me reste le thread qui est probablement une solution efficace mais ça me fait un peu "c....." d'utiliser un thread pour ça.
Je vais tester les différentes options. Peut-être que le "blanc" à la fin de mon sample résoudra aussi le truc.

@logis : Le mettre ailleurs ne servira à rien non plus vu que la boucle s'exécute tant que le bouton est appuyé.


--- Edit ---

Au final en ajoutant un SoundDelay plus long (1sec) ça le fait bien avec la technique d'Ollivier.

Voilà la boucle modifiée :

Code : Tout sélectionner

 If MouseButton(#PB_MouseButton_Left) <> 0
    Select HOVER
    	Case #SP_1,#SP_2,#SP_3,#SP_4,#SP_5
    		StockTabPos(SP,#T_BALLE,MX,MY)
    		If SoundIsOk
    			PlaySound(#FIRESHOT)
    		SoundIsOk = 0 
			SoundLap = Lap + SoundDelay 
			
    		EndIf
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Soucis de répétition de son au clic gauche.

Message par case »

Code : Tout sélectionner

If MouseButton(#PB_MouseButton_Left) <> 0
   Select HOVER ; Sprite survolé
      Case #SP_1,#SP_2,#SP_3,#SP_4,#SP_5
         StockTabPos(SP,#T_BALLE,MX,MY)
         if   Mb=0
           Mb=1
           PlaySound(#FIRESHOT)
         endif
      EndSelect
 ELSE 
   Mb=0
  EndIf
et ca ? ca marche ?
ImageImage
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Soucis de répétition de son au clic gauche.

Message par Ar-S »

Pourquoi faire simple quand on peut faire compliqué !
Super Case, c'est parfait ! :mrgreen:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: [OK] Soucis de répétition de son au clic gauche.

Message par Ollivier »

Je recommande l'horloge quand même!!

Cette méthode est infaillible. Là, juste une variable, c'est bien, c'est simple mais c'est voué à planter...

Car le signal pour un clic en théorie c'est:

000000000001111111111111000000000

MAIS en pratique c'est:

0000000000001011101111110111100000

L'horloge est INDISPENSABLE, et, je le répète infaillible (10 francs je te la vends !).
Seul point critique en conception: ne jamais descendre les délais en dessous de la période de mise à jour de l'horloge, soit 17 millisecondes, sinon ça annule l'attente.

Enfin, cerise à pois verts sur le gateau marbré, il ne faut pas oublier qu'il y a TROIS boutons et plus de 100 touches clavier, sans oublier les touches système, les touches des manettes, les signaux RS232, mais aussi les COMBINAISONS BOOLEENNES de touches (Ctrl+autre, Alt+autre, etc...), les combinaisons booléennes de touches avec tempo pour les handicapés, l'enregistrement/transmission de ces infos en cas de déboguage...

là, tu gères une seule touche. Pour 3 fois le nombre de lignes de code ci-dessus, tu en gères 130 à l'aise, 200, ou plus... via les tableaux (seul Lap.I reste unique).
Tu peux même gérer les signaux RS232 et autres, toujours idem, donc sans te prendre la tête! Bref, la simplicité ne s'observe que dans les choses complexes. :mrgreen:
Répondre