0

现在我正在做一些测试,但我似乎找不到这段代码有什么问题——知道吗?

function IATetris(Pieza,Rotacion,Array)
io.write("The table the script received has: ",Pieza,"\n")
RotacionInicial = Rotacion
PosInicial = 7
final = #Array --this gets the size of the array
i = 1

    for y = 1, 20 do --the array of my tetris board is 20 in x and 14 in y so it would be something like this Array2D[20][14]

    io.write(" First for y ",y,"\n")
    Array2D[y]={} --clearing the new array
    for x = 1,14 do
    io.write(" First for x ",x,"\n")
        if i == final then break end

        io.write(" First for i",i,"\n")
        Array2D[y][x] = Array[i] 
        i= i+1 --seems like you cant use i++ in lua
        end
   end
end

我正在做的是获得 2 个整数和 1 个数组。我不得不在控制台中写代码来检查程序的实际运行位置,而我得到的是......

第一条日志消息:"The table the script received has: "

和第二条日志消息:" First for y "

但是我没有比那些更进一步,所以程序可能在那里崩溃了?这个函数每隔 20 秒左右就会被调用一次。我真的不知道为什么会这样。任何帮助将不胜感激,谢谢。

4

2 回答 2

2

如果此行记录:

io.write(" First for y ",y,"\n")

并且此行不记录:

io.write(" First for x ",x,"\n")

那么问题出在以下几行之一:

Array2D[y]={} --clearing the new array
for x = 1,14 do

for x...绝对适合我,所以我建议它是 Array2D 线。它在语法上没有任何问题,所以它一定是运行时错误。运行时错误应该由 Lua 或其嵌入的应用程序报告。如果它们不是并且函数只是“停止”,那么你就是在盲目地调试,你会在这样的问题上浪费很多时间。

我认为该行可能发生的唯一错误是 if Array2Dis not a table。由于您正在尝试对其进行索引,因此必须这样做。Array2D没有在你的函数中声明,如果它是一个已经在别处定义的全局变量,这很好。但是,如果它只是用于此函数的局部变量,那么您应该添加local Array2D = {}它。

不知道是什么Array2D,或者你的实际错误是什么,很难给出更准确的答案。如果您真的没有比记录更好的方法来找出问题,那么就在 Array2D 行之前,应该测试我的假设:

io.write("Array2D is: ", type(Array2D), "\n")
于 2012-05-02T23:05:59.193 回答
2

看起来Array2D没有初始化(或不是表),所以它在Array2D[y]={}.

您可以使用pcall调用函数并捕获错误,如下所示:

local ok, msg = pcall(IATetris, pieza, rotacion, array)
if not ok then
    print("ERROR:", msg)
end

旁注:您应该尽可能使用local关键字来限制变量的范围。

于 2012-05-02T23:08:20.413 回答