私はjsでoopするのが初めてです。私は Box2dWeb を使用して HTML5 ゲームに取り組んでおり、完全に oop ベースにする必要があると判断しました。そこで、このような物理クラスを別のファイルに作成しましたphysics.js
(function(window)
{
function Physics(element, scale){
//init world logic
}
Physics.prototype.debug = function(){
//debug draw logic
};
Physics.prototype.step = function(dt){
//step logic
};
//making this class(or object) visible on the global scope
//so i can create vars of this type anywhere in the application
window.Physics = Physics;
}(window));
これで、ゲームの物理、グラフィック、アセットなどをすべて初期化するメインgame.js
ファイルができました。内容は次のとおりです。
(function(){
function init(){
var physics = new Physics(document.getElementById("b2dCanvas"), 30);
console.log(physics);
physics.debug();
}
window.addEventListener("load", init);
}());
このファイルは、物理オブジェクトを問題なく初期化します。最終的にこれが私が欲しいものです。すごい!しかし、これ以前のファイルはこのようなもので、init()
機能はありませんでした。
(function(){
var physics = new Physics(document.getElementById("b2dCanvas"), 30);
console.log(physics);
physics.debug();
}());
これは明らかにエラーを投げましたUncaught TypeError: Cannot call method 'getContext' of null
。これは、私が呼び出さなくても、物理コンストラクターが呼び出されていたことを意味します (そして当然element
、この時点では null でした)。それはどのように可能でしたか?私の自己実行関数は、オブジェクトを正しくgame.js
初期化する必要がありましたか? Physics
私は何が欠けていますか?