2013-05-06 109 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