声音和加载进度条
Playing Sounds
有两种主要的方法去播放声音,调用库中的或者调用外部文件
对于大多数游戏来说,最好的方法应该是调用库中的声音, 你可以把声音倒入flash的库中
去使用这个声音你需要设置linkage,填写class name, 然后我们能在代码中使用这个名字来控制声音
我们命名为sound1
然后播放声音,只需要两行代码
var sound1:Sound1 = new Sound1();
var channel:SoundChannel = sound1.play();
我们也可以用一行表示
var channel:SoundChannel = (new Sound1()).play();
播放外部声音的话有一点点地复杂, 首先你需要载入这个声音到一个对象里面
var sound2:Sound = new Sound();
var req:URLRequest = new URLRequest(“PlayingSounds.mp3”);
sound2.load(req);
然后使用播放命令去播放这个声音
sound2.play();
- var button1:Button1 = new Button1();
- var button2:Button2 = new Button2();
- button1.x =50;
- button2.x =200;
- button1.y = 100;
- button2.y = 100;
- addChild (button1);
- addChild (button2);
-
- button1.addEventListener(MouseEvent.CLICK, playinternal);
- button2.addEventListener(MouseEvent.CLICK, playexternal);
-
- function playinternal (Event:MouseEvent)
- {
- var sound1:Sound1 = new Sound1();
- var channel:SoundChannel = sound1.play();}
-
- function playexternal (Event:MouseEvent)
- {
- var sound2:Sound = new Sound();
- var req:URLRequest = new URLRequest("external.mp3");
- sound2.load(req);
- sound2.play();
- }
Loading Screen
flash是流媒体的,意思是尽管flash没有完全下载完毕!只要下载一点点动画还是可以开始播放
这个功能很好!不用用户去等,但是游戏中就不一样了, 因为游戏中需要所有的游戏元素下载完毕
才能运行,所以使用一个loading screen去强制所有的影片元素下载完毕才可以开始播放
简单的方法是你在第一帧加上个stop();
然后我们设置一个ENTER FRAME监听去调用loadProgress函数
addEventListener(Event.ENTER_FRAME, loadProgress);
这个函数可以通过设置this.root.loaderInfo得到影片的状态, 通过bytesLoaded 和bytesTotal
得到影片下载的字节数和影片总字节数
function loadProgress(event:Event) {
// get bytes loaded and bytes total
var movieBytesLoaded:int = this.root.loaderInfo.bytesLoaded;
var movieBytesTotal:int = this.root.loaderInfo.bytesTotal;
// convert to KiloBytes
var movieKLoaded:int = movieBytesLoaded/1024;
var movieKTotal:int = movieBytesTotal/1024;
去展示给用户下载的过程
progressText.text = “Loading: “+movieKLoaded+”K/”+movieKTotal+”K”;
当下载的字节数和影片总字节数相等的时候,我们删除监听并开始播放影片
// move on if done
if (movieBytesLoaded >= movieBytesTotal) {
removeEventListener(Event.ENTER_FRAME, loadProgress);
gotoAndStop(2);
}
}
- stop();
-
- addEventListener(Event.ENTER_FRAME, loadProgress);
-
- function loadProgress(event:Event) {
- // get bytes loaded and bytes total
- var movieBytesLoaded:int = this.root.loaderInfo.bytesLoaded;
- var movieBytesTotal:int = this.root.loaderInfo.bytesTotal;
-
- // convert to KiloBytes
- var movieKLoaded:int = movieBytesLoaded/1024;
- var movieKTotal:int = movieBytesTotal/1024;
-
- // show progress
- progressText.text = "Loading: "+movieKLoaded+"K/"+movieKTotal+"K";
-
- // move on if done
- if (movieBytesLoaded >= movieBytesTotal) {
- removeEventListener(Event.ENTER_FRAME, loadProgress);
- gotoAndStop(2);
- }
- }