在制作Flash游戏的时候经常使用程序来控制声音,也就是使用Sound类。
用法:
var begin_sound:Sound = new Sound();//产生Sound类的实例,并将其引用赋给begin_sound
begin_sound.attachSound("begin");//加载链接名为begin的声音
begin_sound.start(0, 100);//播放声音,0代表从开头播放,100代表循环100变
在类的实例上加载声音会需要声音的链接名,用以下方法设置链接名:使用Ctrl+L打开库,在库中的声音上点右键,再点“链接”就会弹出“链接属性”对话框。选中对话框中“为ActionScript导出”的复选框,就可以设置“链接名”了(标识符也就是链接名)。
但是这样声音还是不能使用,因为只有导出过的声音才能被Sound类的实例加载。所以还要选中“在第一帧导出”复选框。因为在影片加载的最开始就导出了声音,这样无论代码在什么位置,声音都可以正常播放。
可是随之而来又出现了问题:如果制作了“进度调”来反映影片的下载速度,而“进度调”是一个长方形的MC,这个MC会在所有“在第一帧导出”的声音导出后才会加载,这样这个进度调只能在所有声音导出后才能显示。声音是Flash中占空间最大的元素,当进度调加载并显示的时候,影片常常已经被下载了50%以上了,这样进度调就不是从0开始了,那么进度调就失去了原有的作用。在进度调显示之前,Flash在导出声音的时候就像“死了”一样,观看者往往在进度调显示之前,就以为影片没有被加载而关闭页面,这样我们辛辛苦苦作出的Flash就失去一些不耐心的观众。
为了解决这个问题,前辈们发明了一个好的办法,就是“手动导出声音”。这样就可以把所有链接声音的“在第一帧导出”的复选框去掉了。具体来说我是这么做的:新建一个MC,在这个MC中建立足够多的层,每个层的都播放一个需要导出的声音,为了不发出声音,可以把同步方式改为“停止”。再把这个MC放到主场景中进度条后面的帧中,这个帧在影片播放时应该从来不会播放到,只是为了导出声音用。而sound.attachSound()和sound.start()的操作都应该出现在这个帧以后。
这样做原理上似乎没有问题,可是在实际应用中,往往出现不可意料的声音错误。原来在Flash的帮助文件中有一句这么说“注意:如果放置声音的帧不是主时间轴中的第 1 帧,则选择"停止"选项。”这句话也许是翻译的问题,我一直没有理解,但好像声音放在第一帧会有问题。这样的话就将刚才建立的MC中的每个层加载了声音的帧都移到第二帧的位置。这样就没有问题了。
转载请著名出处:http://blog.csdn.net/wizim