2016-09-08 13 views
0

Phaserのサウンドに関する問題をお手伝いできますか?
TypeScriptでサウンドを再生する機能を持つボタンをコーディングしましたが、クロムのボタンを押すと、Phaserはクロームコンソールで次の警告を表示します: Phaser.Cache.getSound: Key "sample" not found in Cache.
まず、mp3ファイルにはPhaserでオーディオを再生する

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(); 
    } 
} 

...私はボタンを押したときに完全にロードされたが、私は時間の十分な量を待っていても、状況は同じですされていない私は確かに、資産/オーディオディレクトリの下sample.mp3ファイルを持っていますPhaserはそれを見つけることができるはずです。

答えて

1

mp3ファイルを、トランスファイルされたjavascriptファイルのフォルダの下に置きます。 私の場合、TypeScriptはsource/assets/audio/sample.mp3を探していましたが、翻訳されたjavascriptはdist/assets/audio/sample.mp3を探していました。
(... test.pngがすでにあったので、フェイザー、それを見つけることができた。しかし、私は完全にmp3ファイルを配置するのを忘れて)

あなたは活字体を使用している場合は、スクリプトが彼らの後に実行されていることを常に意識します蒸散される。

1

サウンドファイルを読み込むことは、デコードしたものが別のものです。なぜそれがキャッシュエラーを出すのか分かりませんが、たぶん起こっているのは、あなたがファイルを読み込んでいて、まだデコードされていないということです。 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 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(); 
    } 
} 

この方法:

はこのような何かを試してみてください。より多くのサウンドをロードする必要がある場合は、最初の引数にキーを追加します。

サウンドを再生するラムダ関数は、(一貫性のため)通常のインスタンスメソッドである可能性があります。

これはテストされていませんが、これはそのとおりです。

+1

ありがとうございます。私がサウンドを再生できなかったのは、トランスファイルされたjsファイルが別のアセットディレクトリを探しているからです。 jsディレクトリのmp3ファイルを配置した後、元のコードが動作し始めました。このmp3ファイルは、デコードされた状態をチェックすることなく実行するのに十分なほど軽いですが、 'setDecodedCallback'を使用して、それを使用する前にオーディオファイルがデコードされていることを100%確かめます。あなたの助けをありがとう! – sora

関連する問題