用Phaser播放音频

时间:2016-09-08 17:19:49

标签: typescript phaser-framework

有人可以帮我解决Phaser声音问题吗? 我编写了一个带有在TypeScript中播放声音的功能的按钮,但是当我按下chrome上的按钮时,Phaser在chrome控制台上给出了以下警告: Phaser.Cache.getSound: Key "sample" not found in Cache.
起初,当我按下按钮时,我认为mp3文件还没有完全加载,但即使我等待了足够的时间,情况仍然是相同的......

export class PlayState extends Phaser.State {

    private sampleSound: Phaser.Sound;
    private testButton:  Phaser.Sprite;

    preload() {
      this.load.image("test", "assets/image/test.png")
      this.load.audio("sample", "assets/audio/sample.mp3");
    }

    create() {
      // Add test button
      this.testButton = this.add.sprite(50, 50, "test");
      this.testButton.anchor.setTo(0.5);
      this.testButton.inputEnabled = true;
      this.testButton.events.onInputDown.add(this.test);

      // Add audio
      this.sampleSound = this.add.audio("sample");
    }

    private test = () => {
      this.sampleSound.play();
    }
}

我当然在assets / audio目录下有sample.mp3文件,因此Phaser应该能够找到它。

2 个答案:

答案 0 :(得分:1)

加载声音文件是一回事,将其解码是另一回事。不确定为什么会出现缓存错误,但最可能发生的是你加载了文件但尚未解码。

尝试这样的事情:

export class PlayState extends Phaser.State {

    private sampleSound: Phaser.Sound;
    private testButton: Phaser.Sprite;

    preload() {
        this.load.image("test", "assets/image/test.png");
        this.load.audio("sample", "assets/audio/sample.mp3");
    }

    create() {
        // Add audio
        this.sampleSound = this.add.audio("sample");

        this.game.sound.setDecodedCallback(["sample"], this.createButton, this);
    }

    private createButton(): void {
        // Add test button
        this.testButton = this.add.sprite(50, 50, "test");
        this.testButton.anchor.setTo(0.5);
        this.testButton.inputEnabled = true;
        this.testButton.events.onInputDown.add(this.test);
    }

    private test = () => {
        this.sampleSound.play();
    }
}

这样,您只需在解码mp3文件后创建按钮。如果您需要加载更多声音,请在第一个参数中添加更多键。

播放声音的lambda函数可能是常规实例方法(仅为了保持一致性)。

Haven没有对它进行测试,但这应该是它。

答案 1 :(得分:1)

将mp3文件放在已转换的javascript文件的文件夹下。 就我而言,TypeScript正在寻找source/assets/audio/sample.mp3,但是已编译的javascript正在寻找dist/assets/audio/sample.mp3
(test.png已经存在,所以Phaser能够找到它。但我完全忘了放置mp3文件......)

使用TypeScript时,请始终注意脚本在转换后执行。