Sound bei Mouseover nur einmal abspielen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Eyes_Only

Betreff: Sound bei Mouseover nur einmal abspielen

BeitragMi, März 13, 2013 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Community,

ich habe ein (hoffentlich) kleines Problem. Ich habe ein Menü mit drei Buttons und wenn man mit der Maus über einen Button fährt, soll ein Sound abgespielt werden. Das Problem ist nun, dass, solange der Mauszeiger auf dem Button ist, der Sound immer wieder in einer Schleife abgespielt wird, weil die Bedingung (wenn Maus über Button, dann...) ja immer erfüllt ist.

Wie kann ich realisieren, dass der Sound nur einmal abgespielt wird und zwar immer dann, wenn ich mit der Maus über den Button fahre?

Ich habe mir schon alle Beiträge die ich über die SuFu gefunden habe angeschaut, aber entweder war nichts richtiges dabei oder ich bin nicht draus schlau geworden. Habe schon mit Schaltern (True, False) probiert und mit StopChannel und Millisecs() aber das klappt so richtig nicht.

Vielleicht weiß ja jmd. Rat. Smile

BlitzBasic: [AUSKLAPPEN]
Repeat
For I=1 To 3
If ImageRectOverlap (maus, x, y, (SCREENWIDTH/2)-100, 150*I, 200, 60) Then
Color 125,125,125
Rect (SCREENWIDTH/2)-100,150*I,200,60,1
menuselect=I

; --> HIER MÜSSTE JETZT IRGENDWO DAS MIT DEM SOUND REIN DENKE ICH <-- ;

Else
Rect (SCREENWIDTH/2)-100,150*I,200,60,0
EndIf

Color 255,255,255
Text SCREENWIDTH/2, (I*150)+30, MenuName$(I),1,1
Next

DrawImage maus, x, y
Flip 0

If MouseHit(1) Then
If menuselect=1 Then SpielStart()
If menuselect=2 Then HowToPlay()
If menuselect=3 Then SpielEnde()
EndIf
Forever
End

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, März 13, 2013 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Da mußt du mit einer Statusvariablen arbeiten

Code: [AUSKLAPPEN]
Repeat
   For I=1 To 3
      If ImageRectOverlap (maus, x, y, (SCREENWIDTH/2)-100, 150*I, 200, 60) Then
         Color 125,125,125
         Rect (SCREENWIDTH/2)-100,150*I,200,60,1
         menuselect=I
;####################################
      If SoundStatus% = 0 Then
       PlaySound bla bla
       Soundstatus% = 1
      End If 
;###################################         
         ; --> HIER MÜSSTE JETZT IRGENDWO DAS MIT DEM SOUND REIN DENKE ICH <-- ;
         
      Else
         Rect (SCREENWIDTH/2)-100,150*I,200,60,0
         ;#########################
         Soundsstatus% = 0
         ;#########################
      EndIf
      
      Color 255,255,255
      Text SCREENWIDTH/2, (I*150)+30, MenuName$(I),1,1
   Next
   
   DrawImage maus, x, y
   Flip 0
   
   If MouseHit(1) Then
      If menuselect=1 Then SpielStart()
      If menuselect=2 Then HowToPlay()
      If menuselect=3 Then SpielEnde()
   EndIf
Forever
End


so oder so ähnlich
vielleicht für jeden Button extra
[BB2D | BB3D | BB+]
 

Eyes_Only

BeitragMi, März 13, 2013 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke. Funktioniert aber nicht.

Soweit hatte ich das auch schon mit den Statusvariablen.

Vlt. muss ich das wirklich für jeden Button einzeln machen, das mit dem Array ist zwar schön so, scheint sich aber nicht mit dem Sound zu vertragen... Sad

BladeRunner

Moderator

BeitragMi, März 13, 2013 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Selbstredend musst Du für jeden Button eine eigene Schaltervariable haben. Hier bieten sich Types an, da man so zusammengefasst für jeden Button eine Type-Instanz hat.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Midimaster

BeitragMi, März 13, 2013 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
kann so auch nicht klappen....

also ich nehme mal an, dass der Sound pro Button nur einmal abgespielt werden soll. Erst nachdem dann die Maus den Button wieder verlassen hat, soll die Soundausgabe wieder möglich sein.

so wie Du es jetzt hast, schalten die jeweils anderen 2 Button bei der Abfrage die Soundmöglichkeit wieder ein. Also musst Du feststellen, dass sich die Maus wirklich in keinem der 3 Buttons befindet.

BlitzBasic: [AUSKLAPPEN]
Global SoundStatus%

Repeat
;diese Variable weiß, ob irgendein Button overlapt hat
Local MenuSelect%=0
For I=1 To 3
If ImageRectOverlap (maus, x, y, (SCREENWIDTH/2)-100, 150*I, 200, 60) Then
Color 125,125,125
Rect (SCREENWIDTH/2)-100,150*I,200,60,1

; ja, es ist overlap
MenuSelect=I

; wenn noch kein Sound
If SoundStatus<>I
SoundStatus=I
PlaySound ....
EndIf
Else
Rect (SCREENWIDTH/2)-100,150*I,200,60,0
EndIf

Color 255,255,255
Text SCREENWIDTH/2, (I*150)+30, MenuName$(I),1,1
Next

; gar kein Overlap, also Sound-Reset
If MenuSelect=0
SoundStatus=0
EndIf

DrawImage maus, x, y
Flip 0

If MouseHit(1) Then
If MenuSelect=1 Then SpielStart()
If MenuSelect=2 Then HowToPlay()
If MenuSelect=3 Then SpielEnde()
EndIf
Forever
End

Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

Eyes_Only

BeitragMi, März 13, 2013 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Tausend Dank Midimaster!

Und danke auch an BladeRunner für den Hinweis mit den Types.

Zwischenzeitlich hatte ich es so gelöst, dass ich jeden Button einzeln angesprochen habe:

BlitzBasic: [AUSKLAPPEN]
If ImageRectOverlap (maus, x, y, (SCREENWIDTH/2)-100, 150, 200, 60) Then
Color 125,125,125
Rect (SCREENWIDTH/2)-100,150,200,60,1
Color 255,255,255
menuselect=1
If hovbut1=0 Then
PlaySound (hoversound)
hovbut1=1
EndIf
Else
Rect (SCREENWIDTH/2)-100,150,200,60,0
hovbut1=0
EndIf

If ImageRectOverlap (maus, x, y, (SCREENWIDTH/2)-100, 300, 200, 60) Then
Color 125,125,125
Rect (SCREENWIDTH/2)-100,300,200,60,1
Color 255,255,255
menuselect=2
If hovbut2=0 Then
PlaySound (hoversound)
hovbut2=1
EndIf
Else
Rect (SCREENWIDTH/2)-100,300,200,60,0
hovbut2=0
EndIf

If ImageRectOverlap (maus, x, y, (SCREENWIDTH/2)-100, 450, 200, 60) Then
Color 125,125,125
Rect (SCREENWIDTH/2)-100,450,200,60,1
Color 255,255,255
menuselect=3
If hovbut3=0 Then
PlaySound (hoversound)
hovbut3=1
EndIf
Else
Rect (SCREENWIDTH/2)-100,450,200,60,0
hovbut3=0
EndIf

Text SCREENWIDTH/2, (150)+30, MenuName$(1),1,1
Text SCREENWIDTH/2, (300)+30, MenuName$(2),1,1
Text SCREENWIDTH/2, (450)+30, MenuName$(3),1,1


Aber das gibt eine ganze Menge mehr Code und ist auch nicht gerade übersichtlich.
Der nächste Schritt wäre dann die Umwandlung in Types gewesen.

Aber so kann ich jetzt jedenfalls das Menüarray beibehalten. Klasse!

Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group