Skip to content

Commit 49bacd0

Browse files
committed
修改声音播放控制例子以及说明
修改声音播放控制例子以及说明
1 parent b7e1752 commit 49bacd0

File tree

3 files changed

+61
-82
lines changed

3 files changed

+61
-82
lines changed

egret/06-sound.md

Lines changed: 35 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,49 @@
11
Egret框架入门第一步 - 声音
22
===============
33

4-
声音也是游戏里的一个必备因素,包括背景音乐,动作音效等等。在Egret中负责声音处理的是SoundContext类,准确的说,是SoundContext的继承者(比如HTML5SoundContext类)。在第四小节中我们介绍过,Egret是一个跨平台的解决方案(虽然目前尚未完全实现),我们目前主要工作在它对HTML5的支持上,对应到声音上,我们使用的是HTML5SoundContext
4+
声音也是游戏里的一个必备因素,包括背景音乐,动作音效等等。目前egret支持的音乐文件格式只有mp3
55

6-
如果您具备一些HTML5的开发经验,应该知道目前浏览器对于声音的支持是有问题的:[支持的格式不统一](http://www.html5cn.com.cn/news/course/2012-10-06/139.html)。所以我们在Egret中,也要注意到这个问题。在准备声音素材的时候,可以让同一个音效具备3种格式:
7-
8-
* ogg
9-
* mp3
10-
* wav
11-
12-
然后在运行时判断所处环境,来决定播放哪一种格式。判断的函数如下:
6+
和图片创建一样,播放音乐文件也需要先加载音乐文件。
137

148
```
15-
/**判断格式是否支持,format可以传递:ogg,mp3,wav*/
16-
private checkSoundCanPlay(format:String):boolean {
17-
var au = document.createElement('audio');
18-
var _check = function (typeStr) {
19-
var result = au.canPlayType(typeStr);
20-
return result != "no" && result != "";
21-
};
22-
if (au.canPlayType) {
23-
if(format=="mp3") {
24-
return _check("audio/mpeg");
25-
} else if(format=="ogg") {
26-
return _check('audio/ogg; codecs="vorbis"');
27-
} else if(format=="wav") {
28-
return _check('audio/wav; codecs="1"');
29-
} else {
30-
return false;
31-
}
32-
}
33-
return false;
9+
/**资源配置文件*/
10+
{
11+
"resources":
12+
[
13+
{"name":"sfx_die","type":"sound","url":"assets/sfx_die.mp3"}
14+
],
15+
16+
"groups":
17+
[
18+
{"name":"demo6","keys":"sfx_die"}
19+
]
3420
}
35-
```
3621
37-
然后使用如下的语句即可播放声音:
22+
/**加载所需资源*/
23+
public loadResource():void {
24+
//使用资源管理器加载资源
25+
RES.addEventListener(RES.ResourceEvent.GROUP_COMPLETE, this.onResourceLoadComplete, this);
26+
RES.loadConfig("resources/resource.json", "resources/");
27+
RES.loadGroup("demo6");
28+
}
29+
```
3830

31+
加载完毕后就可以对音乐文件进行 播放和停止的操作啦。
3932
```
40-
var soundContext:egret.SoundContext = egret.SoundContext.getInstance();//Egret中处理声音的是SoundContext
41-
//soundContext.preloadSound("sfx_die.ogg");//可以预加载声音,以便需要的时候立刻播放
42-
var soundPath:string = "sfx_die";//声音的前缀
43-
if(this.checkSoundCanPlay("ogg"))//根据支持情况设置声音的后缀
44-
soundPath += ".ogg";
45-
else if(this.checkSoundCanPlay("mp3"))
46-
soundPath += ".mp3";
47-
else
48-
soundPath += ".wav";
49-
soundContext.playMusic(soundPath,true);//播放声音,第二个参数决定是否重复
50-
egret.Ticker.getInstance().setTimeout(function (){
51-
soundContext.stopMusic(true);//停止播放
52-
},this,3000);//延迟3秒调用
33+
/**播放声音*/
34+
private onResourceLoadComplete():void {
35+
//获取音乐文件
36+
var sound:egret.Sound = RES.getRes("sfx_die");
37+
//播放音乐文件
38+
sound.play();
39+
//3秒后音乐播放结束
40+
egret.Ticker.getInstance().setTimeout(function () {
41+
//音乐播放结束
42+
sound.stop();
43+
}, this, 3000);//间隔时间为3秒钟
44+
}
45+
5346
```
54-
> 您不一定要准备齐全3种格式,请根据您的目标平台自行决定
5547

5648
- - -
5749

egret/demo/HelloEgret/resources/resource.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
{"name":"icons","type":"sheet","url":"assets/icons.json"},
88
{"name":"monkey_png","type":"img","url":"assets/monkey.png"},
99
{"name":"monkey_json","type":"json","url":"assets/monkey.json"},
10-
{"name":"bitmapFont","type":"font","url":"assets/font.fnt"}
10+
{"name":"bitmapFont","type":"font","url":"assets/font.fnt"},
11+
{"name":"sfx_die","type":"sound","url":"assets/sfx_die.mp3"}
1112
],
1213

1314
"groups":
@@ -16,6 +17,7 @@
1617
{"name":"demo2","keys":"egretIcon,icons"},
1718
{"name":"demo3","keys":"monkey_png,monkey_json"},
1819
{"name":"demo4","keys":"bitmapFont"},
20+
{"name":"demo6","keys":"sfx_die"},
1921
{"name":"demo7","keys":"egretIcon"},
2022
{"name":"demo8","keys":"egretIcon"}
2123
]

egret/demo/HelloEgret/src/Demo6.ts

Lines changed: 23 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,45 @@
11
/**
22
* Sound Demo
33
*/
4-
class Demo6 extends egret.DisplayObjectContainer{
4+
class Demo6 extends egret.DisplayObjectContainer {
55

66
public constructor() {
77
super();
8-
this.addEventListener(egret.Event.ADDED_TO_STAGE,this.startGame,this);
8+
this.addEventListener(egret.Event.ADDED_TO_STAGE, this.startGame, this);
99
}
1010

1111
/**游戏启动后,会自动执行此方法*/
1212
public startGame():void {
1313
this.initDefaultText();
14-
this.initSound();
14+
this.loadResource();
1515
}
16+
1617
/**显示文本*/
1718
private initDefaultText():void {
1819
var label1 = new egret.TextField();
1920
label1.textColor = 0xffffff;
2021
label1.text = "演示声音如何播放";
2122
this.addChild(label1);
2223
}
23-
/**播放声音*/
24-
private initSound():void {
25-
var soundContext:egret.SoundContext = egret.SoundContext.getInstance();//Egret中处理声音的是SoundContext
26-
//soundContext.preloadSound("sfx_die.ogg");//可以预加载声音,以便需要的时候立刻播放
27-
var soundPath:string = "sfx_die";//声音的前缀
28-
if(this.checkSoundCanPlay("ogg"))//根据支持情况设置声音的后缀
29-
soundPath += ".ogg";
30-
else if(this.checkSoundCanPlay("mp3"))
31-
soundPath += ".mp3";
32-
else
33-
soundPath += ".wav";
34-
soundContext.playMusic(soundPath,true);//播放声音,第二个参数决定是否重复
35-
egret.Ticker.getInstance().setTimeout(function (){
36-
soundContext.stopMusic(true);//停止播放
37-
},this,3000);
38-
console.info("music is playing",soundContext instanceof egret.HTML5SoundContext);
24+
25+
/**加载所需资源*/
26+
public loadResource():void {
27+
//使用资源管理器加载资源
28+
RES.addEventListener(RES.ResourceEvent.GROUP_COMPLETE, this.onResourceLoadComplete, this);
29+
RES.loadConfig("resources/resource.json", "resources/");
30+
RES.loadGroup("demo6");
3931
}
40-
/**判断格式是否支持,format可以传递:ogg,mp3,wav*/
41-
private checkSoundCanPlay(format:String):boolean {
42-
var au = document.createElement('audio');
43-
var _check = function (typeStr) {
44-
var result = au.canPlayType(typeStr);
45-
return result != "no" && result != "";
46-
};
47-
if (au.canPlayType) {
48-
if(format=="mp3") {
49-
return _check("audio/mpeg");
50-
} else if(format=="ogg") {
51-
return _check('audio/ogg; codecs="vorbis"');
52-
} else if(format=="wav") {
53-
return _check('audio/wav; codecs="1"');
54-
} else {
55-
return false;
56-
}
57-
}
58-
return false;
32+
33+
/**播放声音*/
34+
private onResourceLoadComplete():void {
35+
//获取音乐文件
36+
var sound:egret.Sound = RES.getRes("sfx_die");
37+
//播放音乐文件
38+
sound.play();
39+
//3秒后音乐播放结束
40+
egret.Ticker.getInstance().setTimeout(function () {
41+
//音乐播放结束
42+
sound.stop();
43+
}, this, 3000);
5944
}
6045
}

0 commit comments

Comments
 (0)