残念ながら、主なゲームのアップデートループが11回以上実行された後にバグが発生するため、reduce codeのサンプルを提供することはできませんが、プロジェクトが簡単であることを願っています。この不可能なバグを見つけ出す方法は?
これは、プロジェクトへのリンクです: https://github.com/marko-avlijas/udacity-frogger
プロジェクトはudacityゲームのプロジェクトであり、それは3つのファイルが付属していますが、私はバグがなければならない場合にのみapp.js
ようだ修正しました。
問題はengine.js
で始まり、機能はUpdateEntities
で変更されていません。
Enemy.prototype.update = function(dt) {
// this is the line which is causing error
this.area.updateOuterLeft(this.area.outer.left + dt*this.speed);
if (this.area.outer.left > settings.canvas.width)
this.area.updateOuterLeft = -settings.canvas.width*2.5;
};
どういうわけか、これは罰金最初の11作品:その後、app.js
でこれを呼び出す
function updateEntities(dt) {
allEnemies.forEach(function(enemy) {
// this is the line which calls problem function
enemy.update(dt);
});
player.update();
}
? updateEntities()
が実行されますが、その後、私はこのエラーを取得し、このエラーに
を取得された回数:
Uncaught TypeError: this.area.updateOuterLeft is not a function
at Enemy.update (file:///data/komp_tuts/udacity/oo_js/frontend-nanodegree-arcade-game-master/js/app.js:123:15)
at file:///data/komp_tuts/udacity/oo_js/frontend-nanodegree-arcade-game-master/js/engine.js:100:19
at Array.forEach (native)
at updateEntities (file:///data/komp_tuts/udacity/oo_js/frontend-nanodegree-arcade-game-master/js/engine.js:99:20)
at update (file:///data/komp_tuts/udacity/oo_js/frontend-nanodegree-arcade-game-master/js/engine.js:83:9)
at main (file:///data/komp_tuts/udacity/oo_js/frontend-nanodegree-arcade-game-master/js/engine.js:49:9)
debugggerでは、私はそれがされている必要がありますようにthis
がwindow
、ないenemy
に設定されていることがわかります。 window
にはarea
が定義されていないため、このエラーが発生します。
私はこれを理解できません。助けてください。
これをデバッグするヒントも歓迎します。
エラーが発生した場合、updateEntities()
が何回呼び出されたかを確認するカウンタを設定しています。しかし、if文をconsole.logに11回置くと、エラーは13回発生します。私が13回目に停止すると、エラーはなく、少し後に起こります。
どのように素早く把握できましたか?ちょうどコードまたはいくつかの高度なクロムデバッガカンフーを見て? –
あなたのコードでは、あなたはすでに '.updateOuterLeft'関数を呼び出していましたが、いつか壊れてしまいました 2)これは誰かを意味します.updateOuterLeft'が変更されています。 3) 'this.area.updateOuterLeftは関数ではありません'というエラー自体です。 4)次に、どのラインが原因であるかを調べる – JagsSparrow