在python pygame中随机从列表中和无限期无需使用按钮手动更改歌曲运行歌曲列表

如何解决在python pygame中随机从列表中和无限期无需使用按钮手动更改歌曲运行歌曲列表

我的游戏中有背景音乐。我有一个包含多首歌曲的列表,我希望它们以随机顺序不断播放(这就是我在那里导入 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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?