キャンバス/コンテキスト オブジェクトを実装するコードを理解しようとしています。このコードは、そのオブジェクトのスプライトがキャンバス上で、マウス ボタン ダウン イベントによって提供される指定された一連の座標で検出された場合 (私が知る限り)、オブジェクトを返します。次のコードはオブジェクトの配列を作成しますか?
var selObj = getObjectByPixel(mx,my);
と
function getObjectByPixel(x,y) {
gctx.clearRect(0,0,MaxX,MaxY);
//alert(levelData.world['ExtraBlockTNT_1'].name);
for (var objname in levelData.world) {
var obj = levelData.world[objname];
var sprd = spriteData[obj.definition];
if(!sprd) continue;
var tr = transform(obj.x, obj.y, sprd.data.width, sprd.data.height);
gctx.save();
gctx.translate(tr.x,tr.y);
gctx.rotate(obj.angle);
gctx.fillRect(-tr.w/2, -tr.h/2, tr.w, tr.h);
gctx.restore();
//console.info(x,y);
var imageData = gctx.getImageData(x, y, 1, 1);
if (imageData.data[3] > 0) {
return obj;
}
}
return null;
}
ピクセルデータが検出された場合、ループ内の最初のオブジェクトが返されるように思えます。その場合、ループは終了しますか(これが起こると思います)、それともオブジェクトを返し続けてそれらをに保存しますかselObj
私はこのコードにかなり混乱していますが、アプリはエラーなしで実行されるため、完全には理解できていません。
ありがとう。