我有一个有两种不同状态的移相器游戏,即preloadState
和gameState
。首先使用Phaser.Loader
中的preloadState
加载声音文件。但是,在完成加载并输入gameState
后,我无法检索所述声音文件。
调用堆栈:
Uncaught TypeError: this.cache.getSound(...).play is not a function
(anonymous function) @ game.js:232
Phaser.SignalBinding.execute @ phaser.js:29960
Phaser.Signal.dispatch @ phaser.js:29765
Phaser.Events.(anonymous function) @ phaser.js:44440
Phaser.InputHandler._pointerOverHandler @ phaser.js:40080
Phaser.Pointer.processInteractiveObjects @ phaser.js:38363
Phaser.Pointer.move @ phaser.js:38275
Phaser.Mouse.onMouseMove @ phaser.js:36385
_onMouseMove @ phaser.js:36275
以下是我的代码:
preload.js
var preloadState = {
preload: function() {
// set preload sprite here
// ...
// Audio files
this.load.audio('button_click','assets/button_click.ogg');
},
create: function() {
this.button_click_sound = this.add.audio('button_click');
}
game.js
var gameState = {
create:function() {
game.cache.getSound('button_click').play(); // Error here
}
main.js
var game = new Phaser.Game(432,800,Phaser.AUTO);
game.state.add('gameState', gameState);
game.state.add('preloadState', preloadState);
game.state.start('preloadState');
根据http://phaser.io/docs/2.2.2/Phaser.Cache.html#getSound,getSound
方法返回Phaser.Sound对象,但其play()
方法不可调用?
答案 0 :(得分:0)
你能试试吗?
var gameState = {
create:function() {
var button_sound = game.add.audio('button_click');
button_sound.play();
}
}

答案 1 :(得分:0)
我想我已经找到了无法访问play()
方法的原因。
缓存以对象的形式存储音频数据,但不存储Phaser.Sound
个实例,因此无法调用该方法。
可以在addSound
中的Phaser.Sound
方法中找到对象创建和插入缓存的代码:
this._cache.sound[key] = {
url: url,
data: data,
isDecoding: false,
decoded: decoded,
webAudio: webAudio,
audioTag: audioTag,
locked: this.game.sound.touchLocked
};
此外,我认为此方法Phaser.Cache#getSound
的文档应更新为不使用Phaser.Sound
作为返回值,而是使用声音对象。