Table of Contents
这里记录的是 Phaser3.50 示例中的 Audio 和 Cache 部分 api 的用法。详情还是看 Phaser api 文档比较好。
Audio
Audio Sprite
class AudioSprite extends Phaser.Scene {
constructor() {
super()
}
preload() {
this.load.baseURL = globalConfig.baseUrl
this.load.image('title', 'assets/pics/catastrophi.png')
this.load.spritesheet('button', 'assets/ui/flixel-button.png', {
frameWidth: 80,
frameHeight: 20
})
this.load.bitmapFont('nokia', 'assets/fonts/bitmap/nokia16black.png', 'assets/fonts/bitmap/nokia16black.xml')
this.load.audioSprite('sfx', 'assets/audio/SoundEffects/fx_mixdown.json', [
'assets/audio/SoundEffects/fx_mixdown.ogg',
'assets/audio/SoundEffects/fx_mixdown.mp3'
])
}
create() {
this.add.image(400, 300, 'title')
const spritemap = this.cache.json.get('sfx').spritemap
let i = 0
for (let spriteName in spritemap) {
if (!spritemap.hasOwnProperty(spriteName)) {
continue
}
this.makeButton(spriteName, 680, 115 + i * 40)
i++
}
this.input.on('gameobjectover', function(pointer, button) {
this.setButtonFrame(button, 0)
}, this)
this.input.on('gameobjectout', function(pointer, button) {
this.setButtonFrame(button, 1)
}, this)
this.input.on('gameobjectdown', function(pointer, button) {
this.sound.playAudioSprite('sfx', button.name)
this.setButtonFrame(button, 2)
}, this)
this.input.on('gameobjectup', function(pointer, button) {
this.setButtonFrame(button, 0)
}, this)
}
makeButton(name, x, y) {
const button = this.add.image(x, y, 'button', 1).setInteractive()
button.name = name
button.setScale(2, 1.5)
const text = this.add.bitmapText(x - 40, y - 8, 'nokia', name, 16)
text.x += (button.width - text.width) / 2
}
setButtonFrame(button, frame) {
button.frame = button.scene.textures.getFrame('button', frame)
}
}
const config = {
type: Phaser.AUTO,
parent: 'demo',
width: 800,
height: 600,
scene: [AudioSprite],
pixelArt: true,
audio: {
disableWebAudio: true
}
}
const game = new Phaser.Game(config)
this.load.bitmapFont(key [, textureURL] [, fontDataURL] [, textureXhrSettings] [, fontDataXhrSettings])
加载基于 xml 的点阵字体(bitmap font)。
点阵字体是把每一个字符都分成16×16或24×24个点,然后用每个点的虚实来表示字符的轮廓。点阵字体也叫位图字体,其中每个字形都以一组二维像素信息表示。点阵字体不需要矢量计算,但是缩放模糊。
this.load.audioSprite(key, jsonURL [, audioURL] [, audioConfig] [, audioXhrSettings] [, jsonXhrSettings])
加载基于 json 文件的音频文件。这段音频是多个音频合成的,音频的分割描述在 json 文件里。比如:
{
"resources": [
"./assets/audio/SoundEffects/fx_mixdown.ogg",
"./assets/audio/SoundEffects/fx_mixdown.mp3"
],
"spritemap": {
"alien death": {
"start": 1, // 秒
"end": 2,
"loop": false
},
"boss hit": {
"start": 3,
"end": 3.5,
"loop": false
},
}
}
如果 json 文件里 resources 指定了音频资源,方法里可以不写 audioURL 参数。
this.cache.json.get(‘sfx’).spritemap
文件加载器(file loader)会将加载的文件放到全局缓存里。这里从缓存里获取 xfs 指向的 json 文件(对象),取得 spritemap 属性。
this.sound.playAudioSprite(key, spriteName [, config])
将一段音频添加到音频管理器并播放,结束后自动销毁。
| 参数 | 说明 |
|---|---|
| key | 音频资源 |
| spriteName | 音频片段名称 |
| config | 音频配置对象。 |
this.add.bitmapText(x, y, font [, text] [, size] [, align])
创建点阵文字并添加到场景。
Phaser.Textures.TextureManager.getFrame(key [, frame])
获取指定纹理的指定帧
Basic Playback And Events
示例中长长的链式调用吓到我了~~~
this.load.audio(key [, urls] [, config] [, xhrSettings])
添加音频。
this.sound.pauseOnBlur( = true/false)
当游戏失焦的时候是否停止播放。比如切换到其他标签页或者应用。
this.sound.addAudioSprite(key [, config])
添加 audio sprite 到音频管理器。
Loop Delay
Phaser.Sound.BaseSound.addMarker(marker)
向当前声音中添加标记。标记由名称、开始时间、持续时间和可选配置对象表示。这允许您将多个声音捆绑到一个音频文件中,并使用标记在它们之间跳转以进行播放。
marker 可以代替 audio sprite 的 json 文件。可用多个 marker 对 this.load.audio() 方式添加的音频标记。
也可以在播放的时候传入 marker 达到播放 audio sprite 的作用。比如:this.sound.play(key, marker)
| 配置项 | 说明 |
|---|---|
| name | 音频标记的唯一识别 |
| start | 音频播放开始位置。秒。可选 |
| duration | 音频标记播放持续时间。秒。可选 |
| config | 音频配置 |
Cache
Json File
this.load.json(key [, url] [, dataKey] [, xhrSettings])
加载 json 文件。
this.cache.json.get(key)
Text File
this.load.text(key [, url] [, xhrSettings])
加载 txt 文本。
this.cache.txt.get(key)
Xml File
this.load.xml(key [, url] [, xhrSettings])
加载 xml 文件。
this.cache.xml.get(key)
获取到的对象是 DOM。可以使用 data.getElementsByTagName(name) 之类的方法。