Lua for循环帮助!

我有以下代码

tile_width = 64;
tile_height = 64;

tile_map = {
    {1,1,1,1,1,1,1,1,1,1,1,1},
    {1,1,1,1,1,3,1,1,1,1,1,1},
    {1,1,1,1,1,3,1,1,1,1,1,1},
    {1,1,1,1,1,3,1,1,1,1,1,1},
    {1,1,1,1,1,3,1,1,1,1,1,1},
    {1,1,1,1,1,1,2,1,1,1,1,1},
    {1,1,1,1,1,1,1,1,1,1,1,1},
    {1,1,1,1,1,1,2,1,1,1,1,1}
}

i=1;
j=1;
while i<table.getn(tile_map) do
    while j<table.getn(tile_map[i]) do
        print(tile_map[i][j]);
        x = (j * tile_width / 2) + (i * tile_width / 2)
        y = (i * tile_height / 2) - (j * tile_height / 2)
        print(x);
        print(y);
        j = j+1;
    end
i = i+1;
end

它起作用了,但它只显示第一行值,而没有进入第二行、第三行等。

我在另一种语言中尝试做什么

for (i = 0; i < tile_map.size; i++):
    for (j = 0; j < tile_map[i].size j++):
        draw(
            tile_map[i][j],
            x = (j * tile_width / 2) + (i * tile_width / 2)
            y = (i * tile_height / 2) - (j * tile_height / 2)
        )

有什么想法我做错了什么吗?

谢谢!

原文链接 https://stackoverflow.com/questions/5691355

点赞
stackoverflow用户381179
stackoverflow用户381179

你必须在每个内循环后将j重置为1。因为:在完成第一次内循环之后,j将已经增加了64次。但你希望重新开始时将j设置为1。

在其他编程语言的代码中,请注意这种j的重新设置是已经被处理好的。

2011-04-17 04:30:56
stackoverflow用户6236
stackoverflow用户6236

以下是您的代码的清理版本。

注意变化:

1.使用local变量而不是全局变量。 2.使用#作为表大小而不是table.getn()。 3.使用数字for循环而不是while。 4.不使用分号。

如果取消io.write()调用并注释掉print,您将以可读的方式打印出地图。

local tile_width = 64
local tile_height = 64

local tile_map = {
    {1,1,1,1,1,1,1,1,1,1,1,1},
    {1,1,1,1,1,3,1,1,1,1,1,1},
    {1,1,1,1,1,3,1,1,1,1,1,1},
    {1,1,1,1,1,3,1,1,1,1,1,1},
    {1,1,1,1,1,3,1,1,1,1,1,1},
    {1,1,1,1,1,1,2,1,1,1,1,1},
    {1,1,1,1,1,1,1,1,1,1,1,1},
    {1,1,1,1,1,1,2,1,1,1,1,1}
}

for i = 1, #tile_map do
  local row = tile_map[i]
  for j = 1, #row do
    --io.write(row[j])
    print(row[j])
    local x = (j * tile_width / 2) + (i * tile_width / 2)
    local y = (i * tile_height / 2) - (j * tile_height / 2)
    print(x)
    print(y)
  end
  --io.write("\n")
end

附:请确保您已经阅读过《Lua编程(第二版)》。请注意,可在线获取的版本是第一版,描述了旧版的Lua 5.0。

2011-04-17 04:44:58