Sound in Schleife nur einmal abspielen
Übersicht

![]() |
maboxBetreff: Sound in Schleife nur einmal abspielen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich lerne zur Zeit das Programmieren eines Menüs. Dazu benutze ich ein kleines Tutorial mit einer Library (PButtons v1.0 by Pdd (C) 2006.)
Ich will, dass wenn man mit der Maus über eine Taste (Bild) geht, ein Sound abgespielt wird. Der sound wird auch abgespielt aber, da die Funktion <<< If PB_ButtonOver(Btn_daddln) then...... >>> usw. in einer Schleife steht wird der Sound so lange wie man mit der Maus über dem Bild ist immer von vorne abgespielt, auch wenn er noch nicht fertig ist. Wie bekomme ich es hin, dass der Sound bei jeder Bildberührung nur einmal abgespielt wird ??? Ich hab es schon mit allerhand IF-Schleifen versucht aber hatte keinen Erfolg. hier noch das Menü und die Library Code: [AUSKLAPPEN] ; Beispiel für die Nutzung der PButtons-lib.
AppTitle ("Mein erstes Menü") Include "PButtons.bb" Graphics 800, 600, 32, 2 SetBuffer BackBuffer() sound = LoadSound ("menü.mp3") musik = PlaySound(sound) klick = LoadSound ("klick.mp3") Global MainImage = LoadImage("main.png") Global menu = 1 Global Timer = CreateTimer(30) Global menustate = 1 Global ms%=MilliSecs() ff = LoadFont("verdana") SetFont ff Global Btn_daddln = PB_CreateButton("Spiel starten", 49, 143, 1, 235, 63) Global Btn_beenden = PB_CreateButton("", 619, 541, 0, 181, 59, "exit_over.bmp") Global Btn_options = PB_CreateButton("", 54, 240, 0, 229, 57, "options.bmp") Global Btn_credits = PB_CreateButton("Credits...", 100, 330, 1, 138, 63) Global Btn_back = PB_CreateButton("Drücke hier, um zurück zu gelangen.", 10, 10, 1, StringWidth("Zurück."), FontHeight()) Global Btn_opback = PB_CreateButton("Optionen... hier geht's zurück zum Menü", 10, 10, 1, StringWidth("Optionen... Zurück"), FontHeight()) PB_SetHintFont("verdana") PB_SetHintColor(245, 248, 152, 0, 0, 0, 208, 55, 163) Repeat WaitTimer(Timer) Cls Select menustate Case 1 ; Hauptmenü ; Erst alle anderen Buttons Deaktivieren PB_DisableAll() PB_EnableButton(Btn_daddln) PB_EnableButton(Btn_beenden) PB_EnableButton(Btn_options) PB_EnableButton(Btn_credits) ; Das Menü-Bild malen DrawImage MainImage, 0, 0 If PB_ButtonHit(Btn_daddln) Then menustate = 2 If PB_ButtonHit(Btn_beenden) Then ExecFile ("www.mausoft.de.tl") If PB_ButtonHit(Btn_options) Then menustate = 3 If PB_ButtonHit(Btn_credits) Then menustate = 4 Case 2 ; daddln ; Jetzt zuerst alle Buttons deaktivieren, sonst könnte man die Anderen Buttons noch drücken! PB_DisableAll() PB_EnableButton(Btn_Back) StopChannel musik Cls Color 255, 255, 255 Text 10, 10, "Zurück." If PB_ButtonHit(Btn_back) Then menustate = 1 musik = PlaySound(sound) EndIf Case 3 ; optionen ; Jetzt zuerst alle Buttons deaktivieren, sonst könnte man die Anderen Buttons noch drücken! PB_DisableAll() PB_EnableButton(Btn_opback) Cls Color 255, 255, 255 Text 10, 10, "Optionen... Zurück" If PB_ButtonHit(Btn_opback) Then menustate = 1 Case 4 ; optionen ; Jetzt zuerst alle Buttons deaktivieren, sonst könnte man die Anderen Buttons noch drücken! PB_DisableAll() If schrift_bild = 0 Then schrift_bild = CreateImage(800,600) SetBuffer ImageBuffer(schrift_bild) Cls font = LoadFont ("comic sans ms",30) SetFont font Color 255, 255, 255 txt0$ = "Menü: *********" txt1$ = "basierend auf: PButtons v1.0 by Pdd "+Chr(169)+" 2006." txt2$ = "Grafik: *********" txt3$ = "gemacht mit Photo Impact" txt4$ = "Copyright"+Chr(169)+" 2007 by mausoft" Text 800/2- StringWidth(txt0$)/2, 0,txt0$ Text 800/2- StringWidth(txt1$)/2, 30,txt1$ Text 800/2- StringWidth(txt2$)/2, 100,txt2$ Text 800/2- StringWidth(txt3$)/2, 130,txt3$ Text 800/2- StringWidth(txt4$)/2, 200,txt4$ EndIf SetBuffer BackBuffer() DrawImage schrift_bild,0,600+y Flip y = (y-2 +(.1*timescale)) If y =< -840 Then y = 0 If KeyHit(1) Then menustate = 1 y =0 EndIf End Select ; Nicht vergessen: Updaten PB_Update() Flip Until menu = 0 End Function zeitnormung() msa=MilliSecs() timescale=msa-ms ms=msa End Function Die Lib: Code: [AUSKLAPPEN] ; PButtons v1.0 by Pdd (C) 2006.
; Mail: pddpms [ÄT] yahoo.de ; Diese Lib darf frei verwendet werden, würde mich aber um einen Credits-Eintrag freuen! Type TButton Field X Field Y Field name$ Field ID Field Width Field Heigth Field Hint Field Hit Field Enabled Field OverImage End Type Global Button.TButton Global PB_ButtonHintFont = LoadFont("verdana") Dim PB_HintColor(9) PB_HintColor(1) = 74 PB_HintColor(2) = 128 PB_HintColor(3) = 225 PB_HintColor(4) = 0 PB_HintColor(5) = 0 PB_HintColor(6) = 0 PB_HintColor(7) = 0 PB_HintColor(8) = 0 PB_HintColor(9) = 0 ; Setzt die Farbe der Hints ; rgb - Farbe des Hintergrunds ; r1g1b1 - Farbe des Rands ; r2g2b2 - Farbe des Textes Function PB_SetHintColor(r, g, b, r1, g1, b1, r2, g2, b2) ; Hintergrund PB_HintColor(1) = r PB_HintColor(2) = g PB_HintColor(3) = b ; Rahmen PB_HintColor(4) = r1 PB_HintColor(5) = g1 PB_HintColor(6) = b1 ; Text PB_HintColor(7) = r2 PB_HintColor(8) = g2 PB_HintColor(9) = b2 End Function ; Setzt die Schriftart des Hints ; font$ - Schriftart Function PB_SetHintFont(font$) PB_ButtonHintFont = LoadFont(font$) End Function ; Erstellt einen Button. Liefert die Identität des Buttons zurück. ; hint$ - Hint-Text ; X - X-Position des Buttons ; Y - Y-Position des Buttons ; HintE - Ob der Hint angezeigt werden soll (0 = nein, 1 = ja) ; width - Breite des Buttons ; height - Höhe des Buttons ; OverImage(optional) - Bild, das angezeigt werden soll, wenn man mit der Maus über den Button fährt Function PB_CreateButton(hint$, X, Y, HintE = 0, width, height, Overimage$ = "") Button = New TButton Button\ID = Handle(Button) Button\name = hint$ Button\Width = width Button\Heigth = height Button\X = X Button\Y = Y Button\Hint = HintE Button\Enabled = True If Overimage$ <> "" Then Button\OverImage = LoadImage(Overimage$) EndIf Return Handle(Button) End Function ; Liefert eine 1 zurück, wenn der Button gedrückt wurde. Ansonsten 0. Function PB_ButtonHit(Btn) If Btn <> 10000 Then Button = Object.TButton(Btn) If Button\Hit = 1 And Button\Enabled = True Then Button\Hit = 0 FlushMouse Return True Else Return False EndIf EndIf End Function ; Liefert eine 1 zurück, wenn die Maus über dem Button ist. Ansonsten 0. Function PB_ButtonOver(Btn) If Btn <> 10000 Then Button = Object.TButton(Btn) If (MouseX() > Button\X) And (MouseX() < (Button\X + Button\Width)) And (MouseY() > Button\Y) And (MouseY() < (Button\Y + Button\Heigth)) And (Button\Enabled = True) Then Return True Else Return False EndIf EndIf End Function ; Aktualisiert alles. Dieser Befehl muss immer in jeder Schleife ausgeführt werden! Function PB_Update() For Button = Each TButton If (PB_ButtonOver(Button\ID) = True) And (Button\Enabled = True) Then If Button\OverImage <> 0 Then DrawImage Button\OverImage, Button\X, Button\Y EndIf If Button\Hint = 1 Then SetFont PB_ButtonHintFont Color PB_HintColor(1), PB_HintColor(2), PB_HintColor(3) ;Hintergrund If (MouseX() + 20 + StringWidth(Button\name) + 10) < 800 Then Rect MouseX() + 20, MouseY() + 1, StringWidth(Button\name) + 10, 15, 1 Color PB_HintColor(4), PB_HintColor(5), PB_HintColor(6) ;Rahmen Rect MouseX() + 20, MouseY() + 1, StringWidth(Button\name) + 10, 15, 0 Color PB_HintColor(7), PB_HintColor(8), PB_HintColor(9) ;Text Text MouseX() + 25, MouseY() + 2, Button\Name Else Rect MouseX() - 5 - (StringWidth(Button\name) + 10) , MouseY() + 1, StringWidth(Button\name) + 10, 15, 1 Color PB_HintColor(4), PB_HintColor(5), PB_HintColor(6) ;Rahmen Rect MouseX() - 5 - (StringWidth(Button\name) + 10), MouseY() + 1, StringWidth(Button\name) + 10, 15, 0 Color PB_HintColor(7), PB_HintColor(8), PB_HintColor(9) ;Text Text MouseX() - (StringWidth(Button\name) + 10), MouseY() + 2, Button\Name EndIf EndIf If MouseHit(1) Then FlushMouse Button\Hit = 1 Else Button\Hit = 0 EndIf FlushMouse EndIf Next End Function ; Aktualisiert die Eigenschaften eines Buttons. Liefert die Identität des Buttons zurück, diese bleibt aber gleich. ; Parameter siehe PB_CreateButton. Function PB_UpdateButton(Btn, hint$, X, Y, HintE = 0, width, height, Overimage = 0) If Btn <> 10000 Then Button = Object.TButton(Btn) If hint$ <> "" Then Button\name = hint$ Button\Width = width Button\Heigth = height Button\X = X Button\Y = Y Button\Hint = HintE Button\Enabled = True If Overimage <> 0 Then Button\OverImage = LoadImage(Overimage) Else Button\OverImage = 0 EndIf Return Handle(Button) EndIf End Function ; Löscht ALLE Buttons Function PB_FreeButtons() For Button = Each TButton Delete Button Next End Function ; Löscht EINEN Button ; Btn - Identität des Buttons Function PB_FreeButton(Btn) Button = Object.TButton(Btn) Delete Button End Function ; Aktiviert einen Button ; Btn - Identität des Buttons Function PB_EnableButton(Btn) If Btn <> 10000 Then Button = Object.TButton(Btn) Button\Enabled = True EndIf End Function ; Deaktiviert einen Button ; Btn - Identität des Buttons Function PB_DisableButton(Btn) If Btn <> 10000 Then Button = Object.TButton(Btn) Button\Enabled = False EndIf End Function ; Aktiviert ALLE Buttons Function PB_EnableAll() For Button = Each TButton Button\Enabled = True Next End Function ; Deaktiviert ALLE Buttons Function PB_DisableAll() For Button = Each TButton Button\Enabled = False Next End Function Vielen vielen Dank! wenn sich jemand mit dem Problem auseinandersetzt. Ich weis das das viel Arbeit ist. |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
- Zuletzt bearbeitet von mabox am Sa, Jul 17, 2010 19:07, insgesamt einmal bearbeitet
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] If PB_ButtonOver(Btn_daddln) then
if play_menu_sound = 0 then play_menu_sound = 1 playsound klick endif else play_menu_sound = 0 endif Wenn Du über dem Button bist wird der Sound einmalig abgspielt. Verlässt Du den Button wird die passende Variable wieder genullt und der sound kann erneut gespielt werden. |
||
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 |
![]() |
maboxBetreff: cooooooool |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen, vielen Dank!
funktioniert super!!! aber ein kleines Problem gibts noch: ich will das Menü schlussendlich in Vollbild ausführen aber dann wird keine Maus angezeigt. Ich habs mit: Code: [AUSKLAPPEN] DrawImage xxx,MouseX,MouseY versucht aber da in der Library noch irgendwelche anderen (für mich unverständlichen) Sachen mit der Maus gemacht werden funktioniert das nicht (nehm ich mal an).
kann mir da nochmal jemand helfen ??? |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hast ne Datei für den Mauszeiger geladen und zeichnest die Maus am Ende der Hauptschleife ein, nach allem anderen? Dann sollte es nämlich gehen. | ||
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 |
![]() |
maboxBetreff: So |
![]() Antworten mit Zitat ![]() |
---|---|---|
So hab ichs gemacht:
Code: [AUSKLAPPEN] ; Beispiel für die Nutzung der PButtons-lib.
AppTitle ("Mein erstes Menü Copyright"+Chr(169)+" 2007 by mausoft") Include "PButtons.bb" Graphics 800, 600, 32, 2 SetBuffer BackBuffer() sound = LoadSound ("menü.mp3") musik = PlaySound(sound) klick = LoadSound ("klick.mp3") maus = LoadImage ("maus.bmp") MaskImage maus, 255,0,255 Global MainImage = LoadImage("main.png") Global menu = 1 Global Timer = CreateTimer(30) Global menustate = 1 Global ms%=MilliSecs() ... ... ;;;;;;SCHLEIFE ... ... If KeyHit(1) Then menustate = 1 y =0 EndIf End Select ; Nicht vergessen: Updaten PB_Update() DrawImage maus,MouseX,MouseY Flip Until menu = 0 ;;;;;;ENDE DER SCHLEIFE End Function zeitnormung() msa=MilliSecs() timescale=msa-ms ms=msa End Function |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm, ich seh ehrlich gesagt keinen vernünftigen Grund warum das Bild nicht gezeichnet werden sollte.... | ||
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 |
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habs grad nochmal ausprobiert und gemerkt das das "maus bild" oben in der linken Ecke auf position 0,0 angezeigt wird.
Das würde vllt heißen, dass die Mauskoordinaten gelöscht wären oder ??? |
||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
I See- Du hast die Klammern hinter MouseX() und Mousey() vergessen... | ||
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 |
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
oh man bin ich blöd.......Vielen Dank! | ||
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl Dönerfresser Homepage |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group