首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有while True循环的Pygame Playlist

没有while True循环的Pygame Playlist
EN

Stack Overflow用户
提问于 2017-05-08 01:12:45
回答 1查看 903关注 0票数 1

下面是我的代码中的一小段:

代码语言:javascript
复制
import pygame

class Player():

  playlist= ["track1.mp3","track2.mp3",...]

  def __init__(self):
    pygame.init()       
    pygame.mixer.music.load(self.playlist[0])
    pygame.mixer.music.play()

  def playnext(self):
    self.playlist = self.playlist[1:] + [self.playlist[0]]
    pygame.mixer.music.load(self.playlist[0])
    pygame.mixer.music.play()

我的问题是,我想在第一首曲目结束后播放下一首曲目,但没有while true循环。这个类并不是我的代码中唯一的一个类,我希望其他类在音乐播放时工作。

就像触发器一样;当歌曲结束时,将调用playnext()函数。

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2017-05-08 04:53:20

您可以使用pygame.mixer.music.set_endevent使事件在音乐结束时出现在事件队列中。只需检查该事件,然后切换到下一首歌曲。

事件将只是一个整数(就像所有其他事件一样),所以为了不隐藏另一个事件,请使用pygame.USEREVENT。如果您有其他用户定义的事件,只需使用pygame.USEREVENT + 1,然后使用pygame.USEREVENT + 2,依此类推。只要确保它是唯一的就行了。

此外,尽量不要将音乐放在player类中;将其重构到另一个类中。一个类最好只做一件事。我在下面创建了一个简短的演示。行if __name__ == '__main__':下的所有内容都可能是您的其他文件中的内容。

代码语言:javascript
复制
import pygame
pygame.init()


class MusicPlayer:

    MUSIC_ENDED = pygame.USEREVENT + 1

    def __init__(self):
        pygame.mixer.init()

        self.songs = ["track1.mp3", "track2.mp3"]
        self.current_song_index = 0
        pygame.mixer.music.set_endevent(MusicPlayer.MUSIC_ENDED)

    def play_next(self):
        pygame.mixer.music.load(self.songs[self.current_song_index])
        pygame.mixer.music.play()
        self.current_song_index = (self.current_song_index + 1) % len(self.songs)


if __name__ == '__main__':
    screen = pygame.display.set_mode((720, 480))
    clock = pygame.time.Clock()

    music_player = MusicPlayer()

    running = True
    while running:

        clock.tick(60)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    music_player.play_next()
            elif event.type == music_player.MUSIC_ENDED:
                music_player.play_next()

        pygame.display.update()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43834375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档