これで、スプラッシュ スクリーンのコンストラクタができました。キャンバス グラフィックを使用しています (以下の ctx はキャンバス要素の 2d コンテキストへの参照です)、コンテキストのローカル コピーを取得しようとすると、それが失われるようです。誰かがなぜそれがどこで未定義になるのか考えていますか? (以下を参照)
function SplashScreen(_ctx)
{
this.loadScene = function()
{
this.img = new Image();
this.img.onload = this.render;
this.img.src = 'art/SplashScreen.png';
};
this.unloadScene = function()
{
delete this.img;
this.img = null;
CollectGarbage();
};
this.render = function()
{
alert(this.ctx);//<--------------undefined
alert(this.img);//<--------------undefined
this.ctx.drawImage(this.img,0,0);
};
alert(_ctx); //<--------------properly defined
this.ctx = _ctx;
alert(this.ctx);//<--------------properly defined
return this;
}
ここで SplashScreen を呼び出しています (注: 以下は main.js からのもので、上は splashscreen.js にあります):
var ctx;
var scene_Splash;
var currentScene;
function main()
{
ctx = document.getElementById('canvas').getContext('2d');
alert(ctx); //<-------fine and defined
scene_Splash = new SplashScreen(ctx);
changeScene(scene_Splash, null, null);
}
function changeScene(_newScene, _transition, _time)
{
currentScene = _newScene;
currentScene.loadScene();
}
これをさらに拡張すると、これらのスクリプトを参照している index.html ファイルの一部が次のようになります。
<html>
<head>
<script language="JavaScript" type="text/javascript" src="splashscreen.js"></script>
<script language="JavaScript" type="text/javascript" src="main.js"></script>
</head>
<body onload="main()">
<canvas id="canvas" width="640" height="960"></canvas>
</body>
</html>