考完了两门考试,趁着导师还没有找我改论文的时间再看一个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的效果了。