情况:
table = { this, that, something else, x_coord, y_coord }
table.x_coord = { 1,2,3,4,7,8,n}
table.y_coord = { 2,4,5,9,n} -- numbers aren't fix
table.check_boxes = { [12] = a function,
[14] = a function,
[15] = a function,
[24] = a function,
[29] = a function,
....(n) }
如您所见,形成 x/y_coords check_boxes。例如:
table.x_coord[1]..table.y_coord[1] ~ table.check_boxes[1]
我使用它在check_boxes之间移动终端中的光标。
现在的问题出在我的光标移动中。目前,我有一个函数,可以根据给定的输入(箭头键(向左/右/向上/向下搜索下一个 x/y_coord。使用返回/空格,我调用复选框后面的函数。
现在,这可以将光标设置在没有给出check_boxes的位置上。实际上这没什么大不了的,因为当 input == space/return 时,输入处理程序
会在table.check_boxes[table.x_coorx[x_index]..table.y_coords[y_index]]
因此,如果光标不指向函数,则不会发生任何事情。但是现在我希望光标被强制到下一个check_box。我能做什么?
到目前为止我的想法:
以下函数适用于 x 或 y,具体取决于输入左/右上/下:
while true do
for k, v in pairs(table.check_boxes) do
if(table.x_coord[x_index] .. table.y_coord[y_index] == k then break end
end -- break -> okay, coord is at a checkbox
x_index = x_index + 1 -- or -1
if table.x_coord[x_index] == nil then
x_index = 1
end
end
现在的问题是最后一个 if 不允许像 x_coord = {1,3} 这样的情况,因为如果达到 2,它将x_index设置为 1。
有什么提示吗?
编辑:现在我得到了那个:
function cursorTioNextBoxRight()
searc_index = x_index
search = true
while search do
search_index = search_index + 1
if search_index > #table.x_coord then
search_index = 1
end
for k, v in pairs(table.check_boxes) do
if tonumber(table.x_coord[search_index..table.y_coord[y_index] == k then
x_index = search_index -- YAAAY
search = false
break
end
end
end
我该死的慢。
local x_newIndex = x_index + 1 --[[ or -1 --]]
x_index = table.x_coord[x_newIndex] and x_newIndex or x_index
当表中存在x_newIndex时,x_index将变为x_newIndex,否则它将保持旧x_index
function cursorTioNextBoxRight()
searc_index = x_index
search = true
while search do
search_index = search_index + 1
if search_index > #table.x_coord then
search_index = 1
end
for k, v in pairs(table.check_boxes) do
if tonumber(table.x_coord[search_index..table.y_coord[y_index] == k then
x_index = search_index -- YAAAY
search = false
break
end
end
结束