我想在游戏中创建一个按钮,以控制背景音乐的开启和关闭。第一次单击将停止背景音乐,而第二次单击可恢复背景音乐。现在,我的按钮可以控制音乐的开和关,但是我需要多次单击才能使其正常工作,似乎并不是每次都捕获到click事件,这是我的代码:
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
if 20 + 50 > mouse_position[0] > 20 and 20 + 20 > mouse_position[1] > 20:
play_music = not play_music
if play_music:
pygame.mixer.music.unpause()
else:
pygame.mixer.music.pause()
pygame.display.flip()
clock = pygame.time.Clock()
clock.tick(15)
答案 0 :(得分:6)
您似乎有一个pygame.mixer.music.pause()
,但resume
中什么也没有。我不确定pygame的音乐混音器如何工作,但我建议使用在单击按钮时更新的标志
music = 0
默认情况下,如果单击,则设置music = 1
,然后选中if music == 1: pygame.mixer.music.pause()
和if music == 0: pygame.mixer.music.unpause()
。每次单击按钮时都要进行检查和标记更改。
答案 1 :(得分:5)
J0hn的答案是正确的。定义一个布尔变量(例如music_paused = False
),当用户单击按钮时切换该布尔变量,并调用pygame.mixer.music.pause
停止音乐,并调用pygame.mixer.music.unpause
恢复音乐流的播放。>
我还建议在事件循环(for event in pygame.event.get():
)中进行冲突检查,因为每个pygame.MOUSEBUTTONDOWN
事件仅应单击一次按钮。只要鼠标按钮按下,pygame.mouse.get_pressed()
就会一直单击音乐按钮。
import pygame as pg
pg.init()
screen = pg.display.set_mode((640, 480))
clock = pg.time.Clock()
BG_COLOR = pg.Color('gray12')
BLUE = pg.Color('dodgerblue1')
pg.mixer.music.load('your_music_file.ogg')
pg.mixer.music.play(-1)
button = pg.Rect(100, 150, 90, 30)
music_paused = False
done = False
while not done:
for event in pg.event.get():
if event.type == pg.QUIT:
done = True
elif event.type == pg.MOUSEBUTTONDOWN:
if button.collidepoint(event.pos):
# Toggle the boolean variable.
music_paused = not music_paused
if music_paused:
pg.mixer.music.pause()
else:
pg.mixer.music.unpause()
screen.fill(BG_COLOR)
pg.draw.rect(screen, BLUE, button)
pg.display.flip()
clock.tick(60)
pg.quit()
答案 2 :(得分:0)
你们不需要布尔变量只需要一个小函数
def toggleMusic():
if pygame.mixer.music.get_busy():
pygame.mixer.music.pause()
else:
pygame.mixer.music.unpause()
pygame.mixer.music.get_busy() 是您需要的布尔值,因为它会检查音乐是否正在播放。如果正在播放音乐,它将返回 True,反之亦然