我试图理解实现画布/上下文对象的代码。如果在画布上的鼠标按钮按下事件(据我所知)提供的一组指定坐标处遇到该对象的精灵,则此代码返回一个对象。以下代码是否创建对象数组?
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
我对这段代码感到很困惑,但应用程序运行时没有错误,所以我一定不能完全理解它。
谢谢。