我遇到了music.fadeout()
的问题。据我所知,音乐将在淡出后停止。那么为什么以下代码是否允许在淡出期间播放声音而不是之后?淡出后,声音混杂在一起; mixer.get_busy()
返回True。
如果我使用music.stop()
代替.fadeout()
音乐播放后播放的声音。
我在这里缺少什么?
if not game_over:
if music_on:
pygame.mixer.music.fadeout(3000)
#pygame.mixer.music.stop()
music_on = False
与此同时,我已经做到了这一点来解决它:
if not game_over:
if music_on:
pygame.mixer.music.fadeout(3000)
fadeout_start = ticks
#pygame.mixer.music.stop()
if fadeout_start + 3000 < ticks:
pygame.mixer.music.stop()
music_on = False
修改的
我的具体问题Ted,我不认为在你的回答(也许我只是在密集)中涵盖了以下内容:
当我开始音乐(K_1),然后停止它(K_2)然后播放声音对象(K_5),mixer.get_busy为True并且声音可以听到。但是,如果我重复上述但是逐渐淡出音乐(K_3)而不是停止使用K_2,则mixer.get_busy为True,但没有声音。
Pydocs似乎暗示音乐在淡出后以与简单music.stop()相同的方式停止。
import pygame
from pygame.locals import *
import sys
pygame.init()
pygame.mixer.init()
pygame.display.set_mode((200,200))
pygame.display.set_caption("Sound tester")
clock = pygame.time.Clock()
pygame.mixer.music.load("theme.mid")
sound = pygame.mixer.Sound("missile.wav")
playing = pygame.mixer.get_busy()
while True:
clock.tick(30)
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == KEYUP:
if event.key == pygame.K_1:
pygame.mixer.music.play(-1)
elif event.key == K_2:
pygame.mixer.music.stop()
elif event.key == K_3:
pygame.mixer.music.fadeout(2000)
elif event.key == K_4:
pygame.mixer.music.stop()
elif event.key == K_5:
sound.play(-1)
elif event.key == K_6:
pygame.mixer.stop()
music_playing = pygame.mixer.music.get_busy()
if music_playing:
print("music playing")
else:
print("no music")
sound_playing = pygame.mixer.get_busy()
if sound_playing:
print("Sound playing")
else:
print("no sound")
答案 0 :(得分:1)
函数pygame.mixer.music.fadeout(3000)
将使音量淡化3秒,然后它将停止音乐。音乐停止后你需要再次启动它。您的代码在淡出后不应播放任何音乐,并且必须是因为您的程序中存在其他逻辑错误(也许您正在连续设置music_on = True
)。
这里有一些代码展示了它是如何工作的:
import pygame
pygame.init()
pygame.display.set_mode((250, 200))
clock = pygame.time.Clock()
pygame.mixer.music.load("music.wav")
playing = pygame.mixer.music.get_busy()
while 1:
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_f:
pygame.mixer.music.fadeout(3000)
print("Fading out")
elif event.key == pygame.K_p:
pygame.mixer.music.play(-1)
print("Play")
elif event.key == pygame.K_s:
pygame.mixer.music.stop()
print("Stop")
elif event.type == pygame.QUIT:
quit()
if playing != pygame.mixer.music.get_busy():
playing = pygame.mixer.music.get_busy()
if playing:
print("Music is playing")
else:
print("Music is not playing")
但是,如果通过“sound”表示pygame.mixer.Sound个对象,那么它就非常有意义了。 pygame.mixer.music模块在pygame.mixer处理声音时处理音乐的播放。这些是分开的(虽然紧密相连)。在停止pygame.mixer
停止音乐时停止pygame.mixer.music
停止声音。
尝试使用以下代码。按1将启动音乐和声音并立即停止pygame.mixer
,按2将启动音乐和声音并立即停止pygame.mixer.music
。你应该在这里停止不同的事情。
import pygame
pygame.init()
pygame.display.set_mode((250, 200))
clock = pygame.time.Clock()
pygame.mixer.music.load("music.wav")
sound = pygame.mixer.Sound("sound.wav")
playing = pygame.mixer.music.get_busy()
while 1:
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_1:
sound.play(-1)
pygame.mixer.music.play(-1)
pygame.mixer.stop()
elif event.key == pygame.K_2:
sound.play(-1)
pygame.mixer.music.play(-1)
pygame.mixer.music.stop()
elif event.type == pygame.QUIT:
quit()