Page 1 sur 2
Unique son dans un menu
Publié : lun. 10/juil./2006 19:12
par Joubarbe
Bonsoir,
J'aimerais simplement créer un menu dans lequel, lorsque l'on passe la souris sur un des boutons, un son se joue. Le problème est que le son se joue à l'infini lorsque le curseur reste sur le bouton ; puisque pour détecter la position de la souris sur un bouton, j'utilise une boucle :
Code : Tout sélectionner
If MouseActualX > 545 And MouseActualX < 753 And MouseActualY > 528 And MouseActualY < 570 And MouseButton(#PB_MouseButton_Left)
DisplayTransparentSprite(Media_BOptionsP,545,527)
PlaySound(Media_WavButtonSurf)
EndIf
Si quelqu'un pouvait me dire comment faire pour que le son ne se joue qu'une seule et unique fois, merci

Publié : lun. 10/juil./2006 19:23
par Cls
Il te suffit de mettre un booleen que tu mets à vrai lorsque le son a été joué.
Ex :
Code : Tout sélectionner
sonJoue.b = false
If MouseActualX > 545 And MouseActualX < 753 And MouseActualY > 528 And MouseActualY < 570 And MouseButton(#PB_MouseButton_Left) and Not sonJoue
DisplayTransparentSprite(Media_BOptionsP,545,527)
PlaySound(Media_WavButtonSurf)
sonJoue = true
EndIf
Publié : lun. 10/juil./2006 19:29
par Joubarbe
Ca ne fonctionne pas car lorsque je reviens sur le bouton, le son ne se joue plus. Il faut en fait que ça fasse "click" lorsque je passe le curseur sur le bouton. Il ne faut pas ça joue en boucle mais il faut que ça le fasse à chaque fois
Edit : il vient d'où le "Not" ? Merci.
Publié : lun. 10/juil./2006 20:38
par Gillou
le not regarde dans les opérateurs de PureBasic
et pour ton code tu peux faire ça :
sonJoue.b = #False
If MouseActualX > 545 And MouseActualX < 753 And MouseActualY > 528 And MouseActualY < 570 And MouseButton ( #PB_MouseButton_Left ) And Not sonJoue
DisplayTransparentSprite (Media_BOptionsP,545,527)
PlaySound (Media_WavButtonSurf)
sonJoue = #True
Else
sonJoue = #False
EndIf
Publié : lun. 10/juil./2006 20:55
par Joubarbe
Bah le truc c'est que Not est reconnu comme une variable chez moi
(J'utilise jaPBe)
Publié : lun. 10/juil./2006 22:10
par Gillou
remplace "And Not sonJoue" par " And sonJoue=#False"
Publié : lun. 10/juil./2006 23:09
par Flype
si 'Not' n'est pas reconnu, utilises-tu purebasic 3.94 ? ce dernier est en effet arrivé avec la v4.
Publié : mar. 11/juil./2006 8:23
par Joubarbe
J'ai bien PureBasic 4.0 mais j'ai l'impression que jaPBe est resté à la 3.93 ou alors tout simplement, Not n'a peut-être pas été implanté dans jaPBe. En tous cas, le Not est-il nécessaire ? Je ne vois pas trop son utilité puisque l'on peut souvent mettre var = False plutôt que Not var... Non ?
Sinon, la commande ne fonctionne toujours pas, j'ai bien un son lorsque je clique, mais si je reste appuyé sur le bouton de la souris, le son se joue en boucle

Publié : mar. 11/juil./2006 12:04
par Cls
Gillou a écrit :remplace "And Not sonJoue" par " And sonJoue=#False"
remplace par sonJoue=#True plutot.
et
Else sonJoue = #false End If
C'est l'inverse.
Publié : mar. 11/juil./2006 12:13
par Joubarbe
Non, ça ne marche toujours pas...
Je veux juste un menu avec du son (un son quand je clique, un son quand je passe sur le bouton), sniff sniff

Publié : mar. 11/juil./2006 14:01
par Gillou
Peut-tu poster le code en entier pour que nous t'apportions une réponse adaptée

Publié : mar. 11/juil./2006 14:50
par Joubarbe
Oki :
Code : Tout sélectionner
Procedure GCMainMenu(MouseSprite$,ScreenSprite$)
;Déclaration de la prise en charge des formats graphiques
UseJPEGImageDecoder()
UsePNGImageDecoder()
UseOGGSoundDecoder()
;Définition des variables
MouseActualX = 500
MouseActualY = 350
;Chargement des medias
Media_MouseSpriteLoad = LoadSprite(#PB_Any,MouseSprite$)
Media_ScreenSpriteLoad = LoadSprite(#PB_Any,ScreenSprite$)
Media_BNouvellePartie = LoadSprite(#PB_Any,"Button_NouvellePartie.bmp")
Media_BChargerPartie = LoadSprite(#PB_Any,"Button_ChargerPartie.bmp")
Media_BOptions = LoadSprite(#PB_Any,"Button_Options.bmp")
Media_BCredits = LoadSprite(#PB_Any,"Button_Credits.bmp")
Media_BQuitter = LoadSprite(#PB_Any,"Button_Quitter.bmp")
Media_BNouvellePartieHL = LoadSprite(#PB_Any,"Button_NouvellePartieHL.bmp")
Media_BChargerPartieHL = LoadSprite(#PB_Any,"Button_ChargerPartieHL.bmp")
Media_BOptionsHL = LoadSprite(#PB_Any,"Button_OptionsHL.bmp")
Media_BCreditsHL = LoadSprite(#PB_Any,"Button_CreditsHL.bmp")
Media_BQuitterHL = LoadSprite(#PB_Any,"Button_QuitterHL.bmp")
Media_BNouvellePartieP = LoadSprite(#PB_Any,"Button_NouvellePartieP.bmp")
Media_BChargerPartieP = LoadSprite(#PB_Any,"Button_ChargerPartieP.bmp")
Media_BOptionsP = LoadSprite(#PB_Any,"Button_OptionsP.bmp")
Media_BCreditsP = LoadSprite(#PB_Any,"Button_CreditsP.bmp")
Media_BQuitterP = LoadSprite(#PB_Any,"Button_QuitterP.bmp")
Media_WavButtonClic = LoadSound(#PB_Any,"Button_clic.wav")
Media_WavButtonSurf = LoadSound(#PB_Any,"Button_surf.wav")
;Définition de la transparence
TransparentSpriteColor(#PB_Any,RGB(255,0,255))
;Boucle principale : déclaration des mouvements
Repeat
ClearScreen(RGB(0,0,0))
;On affiche l'écran principal
DisplaySprite(Media_ScreenSpriteLoad,0,0)
DisplayTransparentSprite(Media_BNouvellePartie,545,292)
DisplayTransparentSprite(Media_BChargerPartie,545,410)
DisplayTransparentSprite(Media_BOptions,545,528)
DisplayTransparentSprite(Media_BCredits,545,646)
DisplayTransparentSprite(Media_BQuitter,545,764)
ExamineMouse()
ExamineKeyboard()
If MouseDeltaX() < 0
MouseActualX = MouseX() - 1
EndIf
If MouseDeltaX() > 0
MouseActualX = MouseX() + 1
EndIf
If MouseDeltaY() < 0
MouseActualY = MouseY() - 1
EndIf
If MouseDeltaY() > 0
MouseActualY = MouseY() + 1
EndIf
If MouseDeltaX() = 0 And MouseDeltaY() = 0
MouseActualX = MouseX()
MouseActualY = MouseY()
EndIf
;Matérialisation des boutons
If MouseActualX > 545 And MouseActualX < 753 And MouseActualY > 293 And MouseActualY < 332
DisplayTransparentSprite(Media_BNouvellePartieHL,546,291)
PlaySound(Media_WavButtonSurf)
EndIf
If MouseActualX > 545 And MouseActualX < 753 And MouseActualY > 410 And MouseActualY < 453
DisplayTransparentSprite(Media_BChargerPartieHL,546,409)
PlaySound(Media_WavButtonSurf)
EndIf
If MouseActualX > 545 And MouseActualX < 753 And MouseActualY > 528 And MouseActualY < 570
DisplayTransparentSprite(Media_BOptionsHL,545,527)
PlaySound(Media_WavButtonSurf)
EndIf
If MouseActualX > 545 And MouseActualX < 753 And MouseActualY > 646 And MouseActualY < 688
DisplayTransparentSprite(Media_BCreditsHL,546,646)
PlaySound(Media_WavButtonSurf)
EndIf
If MouseActualX > 545 And MouseActualX < 753 And MouseActualY > 764 And MouseActualY < 807
DisplayTransparentSprite(Media_BQuitterHL,545,765)
PlaySound(Media_WavButtonSurf)
EndIf
If MouseActualX > 545 And MouseActualX < 753 And MouseActualY > 293 And MouseActualY < 332 And MouseButton(#PB_MouseButton_Left)
DisplayTransparentSprite(Media_BNouvellePartieP,546,291)
PlaySound(Media_WavButtonClic)
GCConfigMenu()
EndIf
If MouseActualX > 545 And MouseActualX < 753 And MouseActualY > 410 And MouseActualY < 453 And MouseButton(#PB_MouseButton_Left)
DisplayTransparentSprite(Media_BChargerPartieP,546,409)
PlaySound(Media_WavButtonClic)
EndIf
If MouseActualX > 545 And MouseActualX < 753 And MouseActualY > 528 And MouseActualY < 570 And MouseButton(#PB_MouseButton_Left)
DisplayTransparentSprite(Media_BOptionsP,545,527)
PlaySound(Media_WavButtonClic)
EndIf
If MouseActualX > 545 And MouseActualX < 753 And MouseActualY > 646 And MouseActualY < 688 And MouseButton(#PB_MouseButton_Left)
DisplayTransparentSprite(Media_BCreditsP,546,646)
PlaySound(Media_WavButtonClic)
EndIf
If MouseActualX > 545 And MouseActualX < 753 And MouseActualY > 764 And MouseActualY < 807 And MouseButton(#PB_MouseButton_Left)
DisplayTransparentSprite(Media_BQuitterP,545,765)
PlaySound(Media_WavButtonClic)
End
EndIf
;On affiche la souris ici pour qu'elle soit au dessus des autres sprites
DisplayTransparentSprite(Media_MouseSpriteLoad,MouseX(),MouseY())
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
EndProcedure
Publié : mar. 11/juil./2006 21:12
par comtois
j'ai pas lu le reste, mais dans cet exemple c'est normal que ça ne fonctionne pas
Code : Tout sélectionner
sonJoue.b = #False
If MouseActualX > 545 And MouseActualX < 753 And MouseActualY > 528 And MouseActualY < 570 And MouseButton ( #PB_MouseButton_Left ) And Not sonJoue
DisplayTransparentSprite (Media_BOptionsP,545,527)
PlaySound (Media_WavButtonSurf)
sonJoue = #True
Else
sonJoue = #False
EndIf
SonJoue est remis à zéro dès qu'il passe à un !! puisqu'il se trouve dans la condition qui le valide et le dévalide , je ne sais pas si je suis clair ?
alors un exemple
sonJoue.b = #False
Code : Tout sélectionner
If MouseActualX > 545 And MouseActualX < 753 And MouseActualY > 528 And MouseActualY < 570 And MouseButton ( #PB_MouseButton_Left )
If SonJoue = #False
DisplayTransparentSprite (Media_BOptionsP,545,527)
PlaySound (Media_WavButtonSurf)
sonJoue = #True
endif
Else
sonJoue = #False
EndIf
j'ai pas testé ...
si tu quittes la position de ton bouton ou si tu relaches la souris sonjoue est mis à zéro. tu peux arranger ça selon le résultat que tu souhaites, par exemple activer le son que sur un front montant de l'appui de la souris.
Publié : mar. 11/juil./2006 21:32
par Joubarbe
Oui j'avais déjà essayé ça, mais cela ne fonctionne pas non plus. Ni pour le curseur passant sur le bouton, ni pour le clique sur le bouton.
Dès que je reste appuyé, le son joue en boucle. Etrange que personne n'aie jamais rencontré ce problème avant..
Publié : mer. 12/juil./2006 9:03
par Backup
utilise
Code : Tout sélectionner
Delay(300)
SendMessage_(Handle de la fenetre,#WM_LBUTTONUP,0,0)
cela force le bouton gauche de la souri a etre relaché au bout de 300 millisecondes
