Chromeのセキュリティ上の問題でローカルだとサウンドがエラーになって動かないと思ったので、似たような症状で解決した事例を探しました。
こちらで問題なくローカル上だと音が出るようになったのですが、Xampp環境では、以前と変わらずエラーを吐いたままの状態です。
解決策を教えて下さい。よろしくおねがいします。
参考にしたurl
https://teratail.com/questions/252196
javascript
1// enchant.js本体やクラスをエクスポートする 2enchant(); 3 4// ページが読み込まれたときに実行される関数 5window.onload = function() { 6 7 // コアオブジェクトを作成する 8 core = new Core(320, 320); 9 10 // 1秒あたりの画面の描画回数を設定する(省略時は「30」) 11 core.fps = 16; 12 13 // ゲームで使用する画像ファイル、サウンドファイルを読み込む 14 // mp3形式のサウンドファイルはプリロードする(FireFox,Safari対応) 15 core.preload('betty.png', 'flowers.png', 'one_0.mp3'); 16 17 // BGM用のサウンドファイルを読み込む 18 core.bgm = Sound.load('one_0.mp3'); 19 // SE用のサウンドファイルを読み込む 20 core.se = Sound.load('Ready.wav'); 21 22 23 // ファイルのプリロードが完了したときに実行される関数 24 core.onload = function() { 25 26 // BGMのボリュームを設定する(0~1) 27 core.bgm.volume = 0.5; 28 // BGMを再生する 29 core.bgm.play(); 30 // SEを再生する 31 core.se.play(); 32 33 // サーフィスを作成する 34 var image = new Surface(320, 320); 35 // 「flowers.png」の(0, 96)の位置から幅「126」ピクセル、高さ「64」ピクセルの領域を 36 // サーフィスの(64, 64)の位置に幅「126」ピクセル、高さ「64」ピクセルで描画する 37 image.draw(core.assets['flowers.png'], 0, 96, 126, 64, 64, 64, 126, 64); 38 39 // サーフィスを表示するためのスプライトを作成する 40 var bg = new Sprite(320, 320); 41 // スプライトにサーフィスを設定する 42 bg.image = image; 43 44 core.rootScene.addChild(bg); 45 46 // スプライトを作成する 47 var player = new Sprite(48, 48); 48 // スプライトで表示する画像を設定する 49 player.image = core.assets['betty.png']; 50 // 表示するフレームの番号を設定する 51 player.frame = 3; 52 // 表示位置のx座標を設定する 53 player.x = 120; 54 // 表示位置のy座標を設定する 55 player.y = 50; 56 57 // フレーム数をカウントするプロパティを追加する 58 player.tick = 0; 59 60 // rootSceneにスプライトを追加する 61 core.rootScene.addChild(player); 62 63 // 「enterframe」イベントが発生したときに実行するリスナを登録する 64 player.addEventListener('enterframe', function(e) { 65 66 // 左ボタンが押されたら、スプライトをx方向に「-4」ピクセル移動する 67 if (core.input.left) { 68 this.x -= 4; 69 // スプライトのフレーム番号を切り替えてアニメーション表示する 70 this.frame = this.tick % 4 * 4 + 1; 71 // フレーム数をインクリメントする 72 this.tick ++; 73 } 74 75 // 右ボタンが押されたら、スプライトをx方向に「4」ピクセル移動する 76 if (core.input.right) { 77 this.x += 4; 78 this.frame = this.tick % 4 * 4 + 3; 79 this.tick ++; 80 } 81 82 // 上ボタンが押されたら、スプライトをy方向に「-4」ピクセル移動する 83 if (core.input.up) { 84 this.y -= 4; 85 this.frame = this.tick % 4 * 4 + 2; 86 this.tick ++; 87 } 88 89 // 下ボタンが押されたら、スプライトをy方向に「4」ピクセル移動する 90 if (core.input.down) { 91 this.y += 4; 92 this.frame = this.tick % 4 * 4; 93 this.tick ++; 94 } 95 96 }); 97 98 // 「touchmove」イベントが発生したときに実行するリスナを登録する 99 player.addEventListener('touchmove', function(e) { 100 // スプライトをタッチして移動した場所、またはドラッグした場所に移動する 101 this.x = e.x - this.width / 2; 102 this.y = e.y - this.height / 2; 103 }); 104 105 // ラベルを作成する 106 var infoLabel = new Label('enchant.js サンプル'); 107 // 表示位置のx座標を設定する 108 infoLabel.x = 16; 109 // 表示位置のy座標を設定する 110 infoLabel.y = 0; 111 // 文字色を設定する 112 infoLabel.color = '#0000FF'; 113 // フォントサイズとフォントの種類を指定する 114 infoLabel.font ='14px sens-serif'; 115 116 // rootSceneにラベルを追加する 117 core.rootScene.addChild(infoLabel); 118 119 120 }; 121 // ゲームスタート 122 core.start(); 123} 124
エラーコードになります
enchant.js:5481 Uncaught TypeError: Cannot read property 'gain' of undefined
at Constructor.set [as volume] (enchant.js:5886)
at Constructor.core.onload (game.js:27)
at Constructor.dispatchEvent (enchant.js:916)
at Constructor.<anonymous> (enchant.js:5085)
at Constructor.dispatchEvent (enchant.js:922)
at Constructor._succ (enchant.js:1465)
at Constructor.call (enchant.js:5458)
at Constructor._succ (enchant.js:5555)
at Constructor.call (enchant.js:5458)
at Constructor._callback (enchant.js:1384)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/03 05:10
2020/06/03 07:34
2020/06/03 11:43 編集
2020/06/03 11:51 編集
2020/06/06 07:23
2020/06/06 15:53