Unique son dans un menu

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Joubarbe
Messages : 93
Inscription : sam. 01/juil./2006 16:40

Unique son dans un menu

Message 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 :)
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Message 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
Joubarbe
Messages : 93
Inscription : sam. 01/juil./2006 16:40

Message 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 :oops:

Edit : il vient d'où le "Not" ? Merci.
Gillou
Messages : 373
Inscription : sam. 28/août/2004 17:35
Localisation : Bretagne, 22
Contact :

Message 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
Joubarbe
Messages : 93
Inscription : sam. 01/juil./2006 16:40

Message par Joubarbe »

Bah le truc c'est que Not est reconnu comme une variable chez moi :roll:
(J'utilise jaPBe)
Gillou
Messages : 373
Inscription : sam. 28/août/2004 17:35
Localisation : Bretagne, 22
Contact :

Message par Gillou »

remplace "And Not sonJoue" par " And sonJoue=#False"
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

si 'Not' n'est pas reconnu, utilises-tu purebasic 3.94 ? ce dernier est en effet arrivé avec la v4.
Image
Joubarbe
Messages : 93
Inscription : sam. 01/juil./2006 16:40

Message 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 :(
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Message 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.
Joubarbe
Messages : 93
Inscription : sam. 01/juil./2006 16:40

Message par Joubarbe »

Non, ça ne marche toujours pas... :mad:
Je veux juste un menu avec du son (un son quand je clique, un son quand je passe sur le bouton), sniff sniff :(
Gillou
Messages : 373
Inscription : sam. 28/août/2004 17:35
Localisation : Bretagne, 22
Contact :

Message par Gillou »

Peut-tu poster le code en entier pour que nous t'apportions une réponse adaptée ;)
Joubarbe
Messages : 93
Inscription : sam. 01/juil./2006 16:40

Message 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
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Joubarbe
Messages : 93
Inscription : sam. 01/juil./2006 16:40

Message 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..
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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 :D
Répondre