0

SoundJS サウンド登録を介してサウンドを読み込もうとすると、次のエラーが発生します。

createjs.js:15 Uncaught Error: Type not recognized.

私は、soundjs ライブラリにファイルの検索またはファイル拡張子に問題があると考えていますが、私が見たすべての例にインラインである .ogg を使用しています。

これが私のコードです:

createjs.Sound.alternateExtensions = ["mp3", "ogg"];

createjs.Sound.on("fileload", function(event) {
    console.log(event);
}, this);

for (var i = 0; i < soundManifest.length; i++) {
    soundManifest[i].loaded = false;
    console.log("loading " + soundManifest[i].src);
    createjs.Sound.registerSound(soundManifest[i].src, soundManifest[i].id)
}

soundManifest は、.ogg ファイルへのパスを指定するソース項目と ID を持つオブジェクトの配列です。パス名を 2 回、3 回チェックしたので、そうではないことは確かです。何か案は?私はChromeで開発しています。

4

1 に答える 1

3

github リンクを投稿していただきありがとうございます。役に立ちました。幸いなことに、非常に簡単な答えがあります。

Main.js で作成した「Object」クラスの名前を変更すると、準備完了です。

-- 長い答え --

スローされたエラーにブレークポイントを投げたところ、SoundJS が LoadItem を作成しようとすると失敗することがわかりました。これは、受信した LoadItem をオブジェクトとして扱う必要があるためですが、以下の行は失敗しています。

} else if (value instanceof Object && value.src) {
    // This code should be executed
}

最初は、SoundJS に過去 2 年間見逃されていたバグがあると思っていましたが、詳しく調べてみると、アプリケーションのオブジェクト プロトタイプが台無しになっていることがわかりました。ブラウザ ウィンドウを開いコンソールにアクセスすると、次のように返されtrueます。

({}) instanceof Object
// true

ただし、アプリの実行中は、 が返されますfalse

CreateJS と main 以外の他のすべてのクラスを削除してから、これを試したところ、問題が明らかになりました。

new Object();
// Throws an error that includes info about "Victor"

main.js では、CreateJS Shape を拡張する「オブジェクト」クラスを定義しています。コードの周りにメソッド クロージャがないためグローバルであり、グローバル オブジェクト クラス/プロトタイプを上書きします。


この説明を含めた理由は、アプリでプロトタイプが壊れていることを示すための手順を実行するまで、何が起こっているのかを理解できなかったからです。私はそれがいくつかの興味深いかもしれないと思った:)

于 2016-04-19T22:09:45.157 に答える