2013-05-06 125 views
0

我寫一些JavaScript從陣列創建X和Y座標,所以我有這樣的代碼:爲什麼忽略這兩個位置?

var map1 = [ 
    gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg, 
    gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg, 
    gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg, 
    gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg, 
    gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg, 
    gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg, 
    gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg, 
    gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg, 
    gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg, 
    gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg, 
    gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg, 
    gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg, 
    gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg, 
    gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg, 
    gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg,gg, 
]; 
    for (var i=0; i<map1.length; i++) { 
    if (i > 16) { 
     dy = Math.floor(i/15) * 16; 
    } 
    dx = i * 16 
    while (dx >= 240) { 
     dx = dx - 240; 
    } 
    } 

和代碼作品非常好,除了座標0,1和1,1的arent工作?這些座標正在使用此頁面上的主體here構建一個具有16px塊的畫布。並dxdy適合這個等式,ctx.drawImage(tileset, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);謝謝!

+0

我假設dx和dy是座標嗎? 0,1和1,1的當前值是什麼,你期望它們是什麼? – Jonah 2013-05-06 00:57:48

+0

'dy'只在一個條件下定義。它在第一次循環運行時說什麼它的價值?它是一個很大的混亂代碼,缺少逗號,並且有一個瘋狂的廢話「while」。 – Havenard 2013-05-06 01:02:40

+0

但它是在一個for循環的條件下,同時是帶來禮服過去16 – 2013-05-06 01:22:54

回答

0

不知道這是否有幫助 - 但控制檯中的以下代碼片段似乎爲所有位置提供了正確的結果。你能解釋一下你期望的輸出與你得到的實際輸出嗎?

var map1 = new Array(225); 
var dx, dy; 

for (var i=0; i<map1.length; i++) { 
    if (i > 16) { 
     dy = Math.floor(i/15) * 16; 
    } 
    dx = i * 16 
    while (dx >= 240) { 
     dx = dx - 240; 
    } 
    console.log(dx + ',' + dy); //Seems to print all positions ok 
} 
+0

工作就像一個魅力,哇我做錯了嗎? – 2013-05-06 01:38:39

+0

該代碼仍然沒有提前明確定義'dy',但至少通過使用'var',你可以映射任何可能存在的未定義值。 爲什麼不是這樣的身體內: 'dx =(i&15)<< 4; dy =(i >> 4)<< 4;' 這裏的數學也更快。 – ChrisF 2013-05-06 03:23:34

+0

等待,這是錯誤的,這兩個仍然沒有固定,現在整個第一行是未定義在它的dy值 – 2013-05-06 07:28:04