シューティングゲームで、接触判定にwithinを使ったとき、エラーが発生しました。
コード
Sボタンが押されたら弾丸を発射し、それを敵(enemys1)に当てたら終了画面(endFx)に移るプログラムです。
plbulは、初めは空っぽの配列ですが、Sボタンを押すと弾になり(PlBulオブジェクトとなり)、通し番号(PlBulCount、0~19までの数字)がつけられます。
PlBulクラスはSpriteクラスを継承しています。
JavaScript
1 var plbul = []; 2 var PlBulCount = 0; 3 4 mainScene.addEventListener('enterframe', function(e) { 5 6 if(core.input.s){ 7 plbul[PlBulCount] = new PlBul(players1.x,players1.y,players1.rotation); 8 mainScene.addChild(plbul[PlBulCount]); 9 PlBulCount = (PlBulCount + 1) % 20; 10 } 11 12 for(var i = 0; i < 20; i++){ 13 if (enemys1.within(plbul[i],32)) { 14 state = 2; 15 PlX = players1.x; 16 PlY = players1.y; 17 EnX = enemys1.x; 18 EnY = enemys1.y; 19 core.replaceScene(core.endFx(PlX,PlY,EnX,EnY,1)); 20 } 21 } 22 }); 23
エラー文
Uncaught TypeError: Cannot read property '_dirty' of undefined
( if (enemys1.within(plbul[i],32)) の行に発生)
予想・疑問
上のエラー文は、_dirtyというプロパティを読み取れない事を表しています。
_dirtyが何を意味するのかはよく分かりませんでしたが、恐らくwithinに関係する何かのようです(http://wise9.github.io/enchant.js/doc/core/ja/symbols/src/lang_ja_enchant.js.htmlを見ると、withinの近くに_dirtyがあったから)。
つまり、withinが何かを読み取れていないようです。
そうだとすると、読み取れないものはplbul[i]だと思います。
Sボタンが押されるまで(withinが欲すると思われる)plbulの座標情報が存在しないからです。
よって、plbulが弾丸になる(PlBulオブジェクトになる)までは、このwithinを含む行を読み飛ばして欲しいです。
どうすれば読み飛ばしてもらえますか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/21 09:39