繁体   English   中英

Pygame:音乐不会立即循环播放

[英]Pygame: music do not play instantly on loop

首先,对不起我的英语不好。

我正在用Python 3.4Pygame编写游戏。 游戏包括从XML脚本解析的提供屏幕视图和音乐等内容的场景。

我希望音乐可以立即播放,但不能在下一场景播放。

并且无法在网络上找到类似的问题。

如何重写代码以即时播放音乐?

我写了这样的代码:(删除了图形部分)

xml文件在这里: https : //pastebin.com/bSBiv1jX

import pygame
import xml.etree.ElementTree as ET

class Script():
    def __init__(self, name, filename):
        self.name = name
        self.parsed = ET.parse(filename)
        self.root = self.parsed.getroot()
        self.scene_list = self.root.findall("scene")

        self.flag_list = str(self.root.findtext("flags")).split(",")
        for flag in self.flag_list:
            setattr(self, flag, False)

    def music_play(self, number):
        scene = self.scene_list[number]
        if scene.findtext("music") == 'stop':
            pygame.mixer.music.stop()
        elif scene.findtext("music") != '':
            pygame.mixer.music.load(scene.findtext("music"))
            pygame.mixer.music.play(-1, 0.0)

    def goto(self, number):
        string = self.scene_list[number].findtext("goto")
        if string == '':
            return number
        elif isNumber(string) == True:
            return int(string)
        elif isNumber(string) == False:
            return string

    def if_goto(self, string, number):
        iflist = string.split(', ')
        if getattr(self, iflist[0]) == True
            return int(iflist[1])
        else:
            return number + 1

def isNumber(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

def runGame():
    pygame.init()
    windowSurface = pygame.display.set_mode((200, 200))

    clock = pygame.time.Clock()
    run = True

    scene_number = 0

    script = Script('dummy', 'scenario/dummy.xml')

    while run:
        # 입력 처리
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                if scene_number == script.goto(scene_number):
                        scene_number += 1
                    elif scene_number != script.goto(scene_number):
                        if isNumber(script.goto(scene_number)):
                            scene_number = script.goto(scene_number)
                        else:
                            scene_number = script.if_goto(script.goto(scene_number), scene_number)

        script.music_play(scene_number)

        pygame.display.update()

        clock.tick(30)
    pygame.quit()

def main():
    runGame()

if __name__ == "__main__":
    main()

https://www.pygame.org/docs/ref/music.html#pygame.mixer.music.load

如果音乐流已经在播放,它将停止

https://www.pygame.org/docs/ref/music.html#pygame.mixer.music.play

如果音乐已经在播放,它将重新启动。

在游戏循环的每次迭代中,您都调用music_play并重新启动音乐。 如果音乐尚未开始播放,则只能开始播放。

例如,您可以仅在场景更改时调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM