簡體   English   中英

JavaScript在for循環中返回var

[英]JavaScript returning var in for loop

我試圖理解實現畫布/上下文對象的代碼。 如果通過鼠標按下事件提供的一組指定坐標在畫布上遇到該對象的精靈,則此代碼返回一個對象(據我所知)。 以下代碼是否創建對象數組?

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

我對這段代碼感到很困惑,但是該應用程序運行時沒有錯誤,因此我不必完全理解它。

謝謝。

它不返回數組。 它返回一個對象,請參見: return obj; 您只能從函數返回一次。

ps如果此代碼的作者將返回一個數組,則他可能會稱其為:getObjectsByPixel(請注意s )。

return 總是結束執行,並在輸入函數時返回堆棧。

因此,這意味着它僅返回單個對象。 為了返回一個數組,該函數必須首先創建該數組,然后在循環完成后返回它。

我終於弄清楚了塊的動態。 循環只返回一個obj (這也是我所知道的)。 邏輯是,對於畫布上的每個對象精靈,都會在覆蓋的畫布中創建一個不可見的填充矩形,直到鼠標單擊坐標位於該矩形之一的范圍內為止。 然后返回生成該矩形的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM