Panda3D学习 (6):音乐盒

xiaoxiao2021-02-28  17

考完了两门考试,趁着导师还没有找我改论文的时间再看一个demo好了

这个demo是一个音乐盒,涉及声音的控制

self.musicBoxSound = loader.loadMusic('music/musicbox.ogg')

self.lidSfx = loader.loadSfx('music/openclose.ogg')

注释里解释前者更多的用于加载背景音乐

这个程序里第一次接触到了Direct Gui控件

一个是self.slider = DirectSlider(pos=(-0.1, 0, .75), scale=0.8, value=.50,  command=self.setMusicBoxVolume)

会生成滑块以及一条线,滑块位置对应一个值,value设置初始值,command设置当value改变时调用的函数。

      self.button = DirectButton(pos=(.9, 0, .75), text="Open",                                   scale=.1, pad=(.2, .2),                                   rolloverSound=None, clickSound=None,

                                   command=self.toggleMusicBox)

这是生成右上角 open 按钮的代码。同理,command代表鼠标按下时调用的函数。

发现例程里凡是声明都是用的self. 即对象变量而不是类变量,其实实现来讲的话没有区别,但是可能代码习惯如此?

其他的部分和之前类似,开箱子和关箱子这些动画是通过Interval等语句实现的。

有一点是关于音乐的控制,因为load的music本身没有暂停等功能,因此通过以下语句:

self.musicTime = self.musicBoxSound.getTime()

self.musicBoxSound.stop()  # Stop the music

通过stop暂停音乐,并且通过getTime函数获取当前播放的时间点。

self.musicBoxSound.setTime(self.musicTime)

self.musicBoxSound.play()  # Play the music

把之前存储的暂停点通过setTime函数读取,然后用play就能达到resume的效果了。

转载请注明原文地址: https://www.6miu.com/read-1750211.html

最新回复(0)