问题描述
我的游戏中有背景音乐。我有一个包含多首歌曲的列表,我希望它们以随机顺序不断播放(这就是我在那里导入 choice
的原因)但它只在我称为 play 的用户定义函数上运行一次.当我放 loops =-1
时,它只会运行一遍又一遍选择的随机歌曲。我想让它改变歌曲而不必手动改变它(不需要使用按钮或其他东西来改变歌曲)。我该怎么做?
from tkinter import *
import pygame
from random import choice
pygame.mixer.init()
Music_list=["song1.mp3","song2.mp3","song3.mp3"]
#Play the backgound music
def play():
Song=choice(Music_list)
pygame.mixer.music.load(Song)
pygame.mixer.music.play() # if i put a loops=-1 here,it will only run that one song forever. It wont change. And if I have nothing there,it only plays once
play()
解决方法
因为您在选择歌曲后无限地迭代,所以您总是得到相同的歌曲。
你想移动你的循环来调用整个播放函数
from tkinter import *
import pygame
from random import choice
pygame.mixer.init()
MUSIC_LIST=["song1.mp3","song2.mp3","song3.mp3"]
#Play the backgound music
def play():
Song=choice(MUSIC_LIST)
pygame.mixer.music.load(Song)
pygame.mixer.music.play()
while True:
play()
,
使用 mixer.music.get_busy()
测试是否有任何声音被混合。一首歌曲结束时播放下一首歌曲:
import pygame
from random import choice
pygame.mixer.init()
Music_list=["song1.mp3","song3.mp3"]
current_list = []
def play():
song = choice(Music_list)
pygame.mixer.music.load(song)
pygame.mixer.music.play()
while True:
if not pygame.mixer.music.get_busy():
play()
# [...]
改进播放方法,确保没有曲目重复播放:
Music_list=["song1.mp3","song3.mp3"]
current_list = []
def play():
global current_list
if not current_list:
current_list = Music_list[:]
random.shuffle(current_list)
song = current_list[0]
current_list.pop(0)
pygame.mixer.music.load(song)
pygame.mixer.music.play()