【问题标题】:Getting table values once the for-do loop is overfor-do 循环结束后获取表值
【发布时间】:2014-08-12 06:50:39
【问题描述】:

我编写了以下函数,在屏幕上绘制一个网格(在 X-Plane 10 中使用 FlyWithLua)。

它可以正常工作并绘制网格、框/标签和所有内容,显然它会创建“lt_box”三维数组,就像我在循环中打印时一样(注释掉的打印指令) 它打印正确的值。

问题是,如果我从代码的任何其他部分调用 lt_box[x][y][z],我将无法获得这些值......

有什么想法吗?

function draw_lt_table()
    idx = 1
    idx2 = 1
    xx1 = rth_box[1]
    xx2 = rth_box[2]
    yy1 = rth_box[3]
    yy2 = rth_box[4]
    lite_idx = 1
    cell_x_size = 38
    cell_y_size = 40

    num_cols = 6
    num_rows = 6

    lt_box = {}

        if d_tab==false or d_stg==false then
            return lt_box
        end

        for idx2 = 1,num_rows,1 do
            for idx = 1,num_cols,1 do
                lt_box[idx] = {}
                lt_box[idx][idx2] = {xx1+((cell_x_size*idx)-cell_x_size), xx1+(cell_x_size)*idx, 1+yy2+((cell_y_size*idx2)-cell_y_size), 1+yy2+(cell_y_size)*idx2}  
                graphics.set_color(0, 0, 0, 0.7)
                graphics.draw_rectangle(lt_box[idx][idx2][1], lt_box[idx][idx2][3], lt_box[idx][idx2][2], lt_box[idx][idx2][4])
                graphics.set_color(1, 1, 1, 0.7)
                graphics.set_width(2)
                graphics.draw_line(lt_box[idx][idx2][1],lt_box[idx][idx2][3],lt_box[idx][idx2][1],lt_box[idx][idx2][4])
                graphics.draw_line(lt_box[idx][idx2][1],lt_box[idx][idx2][4],lt_box[idx][idx2][2],lt_box[idx][idx2][4])
                graphics.draw_line(lt_box[idx][idx2][2],lt_box[idx][idx2][4],lt_box[idx][idx2][2],lt_box[idx][idx2][3])
                graphics.draw_line(lt_box[idx][idx2][2],lt_box[idx][idx2][3],lt_box[idx][idx2][1],lt_box[idx][idx2][3])
                light_up(unpack(lt_box[idx][idx2]))
                glColor4f(1, 1, 1, 0.7)
                draw_string(lt_box[idx][idx2][1]+12, lt_box[idx][idx2][3]+30, lite_idx)
                draw_string(lt_box[idx][idx2][1]+3, lt_box[idx][idx2][3]+15, lites_vars[4][lite_idx])
                draw_string(lt_box[idx][idx2][1]+3, lt_box[idx][idx2][3]+5, lites_vars[lt_set][lite_idx])
                lite_idx = lite_idx+1 -- this is usd in line 115-116 to select values as labels 
            --[[
            print("LT_BOX " .. idx .. " " .. idx2 .. " x1 ".. lt_box[idx][idx2][1])
            print("LT_BOX " .. idx .. " " .. idx2 .. " x2 ".. lt_box[idx][idx2][2])
            print("LT_BOX " .. idx .. " " .. idx2 .. " y1 ".. lt_box[idx][idx2][3])
            print("LT_BOX " .. idx .. " " .. idx2 .. " y2 ".. lt_box[idx][idx2][4])
            print("****************************************************************************")
            --]]
            end
        --print("____________________________________________________________________________")
        end

end

【问题讨论】:

  • lt_box 不是draw_lt_table 的本地值,因此您应该能够在调用draw_lt_table 后的任何时间使用分配给draw_lt_table 的值。请编辑您的问题以澄清。

标签: for-loop multidimensional-array lua


【解决方案1】:

您在内部循环中有lt_box[idx] = {},这意味着您每次添加元素时都会重置该表。您必须在外循环中创建该表。

for idx = 1,num_cols,1 do
  lt_box[idx] = {}
  for idx2 = 1,num_rows,1 do

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    相关资源
    最近更新 更多