如何解决你如何在 pygame 中保留一个 pygame.mixer 频道?
预留频道如何运作?我可以预订特定频道还是随机挑选?没有关于它如何工作的明确文档,我似乎做错了,因为 mixer.findChannel()
仍然选择保留频道。
这是我的代码:
self.music1 = pygame.mixer.Channel(0)
self.music2 = pygame.mixer.Channel(1)
self.sound1 = pygame.mixer.Channel(2)
self.sound2 = pygame.mixer.Channel(3)
self.sound3 = pygame.mixer.Channel(4)
self.sound4 = pygame.mixer.Channel(5)
self.sound5 = pygame.mixer.Channel(6)
self.sound6 = pygame.mixer.Channel(7)
pygame.mixer.set_reserved(2)
我想预订音乐 1 和音乐 2。
文档说明 mixer.set_reserved()
的参数定义了将保留的通道数。
如果我不能选择保留哪些频道,有什么办法可以解决吗?
提前致谢
解决方法
有时缺乏 pygame 的文档,如果您查看 pygame 实际调用的 SDL 函数以及这些函数的作用,很多东西会更有意义。
所以 mixer.set_reserved()
实际上是 calls Mix_ReserveChannels
,但不返回保留频道的数量:
Mix_ReserveChannels
int Mix_ReserveChannels(int num)
将 -1 作为通道编号传递给播放函数时,在播放样本时保留 num 通道。从通道 0 到 num-1 保留通道。传入零将取消保留所有通道。通常 SDL_mixer 在没有保留任何通道的情况下启动。
以下功能受此设置影响:
4.3.3 Mix_PlayChannel
4.3.4 Mix_PlayChannelTimed
4.3.5 Mix_FadeInChannel
4.3.6 Mix_FadeInChannelTimed
mixer.findChannel()
calls Mix_GroupAvailable
:
Mix_GroupAvailable
int Mix_GroupAvailable(int tag)
在组标签中查找第一个可用(未播放)频道。
如您所见,findChannel
忽略保留频道。保留频道只会防止在使用上述功能之一时自动选择它。 Pygame 使用 Mix_PlayChannelTimed
和 Mix_FadeInChannelTimed
,例如 here。
总而言之,如果您想确保播放声音,请使用 mixer.set_reserved
保留一个或多个频道。
然后,要播放重要的声音,请使用mixer.findChannel
要么获得一个保留频道或获得一个未保留的免费频道。如果您想完全控制频道以播放声音,您还可以创建一个新的 Channel
实例,其频道编号为 0
(如果您保留了多个频道,则可以使用更多频道编号)。>
在不指定频道的情况下播放所有其他声音,它们只会在非保留频道上播放。
所以您问题中的代码已经满足您的要求:保留频道 0
和 1
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。