警告:此问题仅适用于已购买并了解Draw Library的Touch Lua用户。
请参阅本问题的底部部分以查看完整的程序。我在开始时使用的小部件是该计划的一部分(NUMPAD.LUA)
好的,现在提问:
•使用"。"在" b"之间和" x"?或者" b"并且"画"?等...
•表格如何设置按钮?请超级具体?
•为什么会出现" +"," *"和"(j-1)"在第7和第8行?
•那里的高度和宽度是多少?我以为只有x和y。
function createButtons()
buttons = { }
local c = 1
for i = 1, 4 do
for j = 1, 3 do
local b = { }
b.x = 80 + 60 * (j-1)
b.y = 160 + 60 * (i-1)
b.width = 40
b.height = 40
b.color = draw.blue
b.draw = drawButton
b.action = digitAction
buttons[c] = b
c = c + 1
end
end
buttons[1].title = '7'
buttons[2].title = '8'
buttons[3].title = '9'
buttons[4].title = '4'
buttons[5].title = '5'
buttons[6].title = '6'
buttons[7].title = '1'
buttons[8].title = '2'
buttons[9].title = '3'
buttons[10].title = '0'
buttons[11].title = '.'
buttons[11].action = dotAction
buttons[12].title = 'C'
buttons[12].color = draw.orange
buttons[12].action = clearAction
end
最后,引用整个程序...... •点击按钮时按钮是如何知道的?具体来说,代码行是什么以及它是如何工作的? (我对轨道接触有一个非常微弱的理解btw)
function digitAction(button)
if string.len(display.title) < 16 then
sys.alert('tock')
if display.started then
display.title = display.title .. button.title
else
if button.title ~= '0' then
display.title = button.title
display.started = true
end
end
else
sys.alert('tink')
end
end
function dotAction(button)
if string.find(display.title, '.', 1, true) then
sys.alert('tink')
else
display.title = display.title .. '.'
display.started = true
sys.alert('tock')
end
end
function clearAction(button)
sys.alert('tock')
display.title = '0'
display.started= false
end
function createDisplay()
display = { }
display.x = 60
display.y = 100
display.width = 200
display.height = 40
display.title = '0'
display.color = draw.red
display.started = false
end
function createButtons()
buttons = { }
local c = 1
for i = 1, 4 do
for j = 1, 3 do
local b = { }
b.x = 80 + 60 * (j-1)
b.y = 160 + 60 * (i-1)
b.width = 40
b.height = 40
b.color = draw.blue
b.draw = drawButton
b.action = digitAction
buttons[c] = b
c = c + 1
end
end
buttons[1].title = '7'
buttons[2].title = '8'
buttons[3].title = '9'
buttons[4].title = '4'
buttons[5].title = '5'
buttons[6].title = '6'
buttons[7].title = '1'
buttons[8].title = '2'
buttons[9].title = '3'
buttons[10].title = '0'
buttons[11].title = '.'
buttons[11].action = dotAction
buttons[12].title = 'C'
buttons[12].color = draw.orange
buttons[12].action = clearAction
end
function drawDisplay()
draw.setfont('Helvetica', 20)
draw.setlinestyle(2, 'butt')
local x1, y1 = display.x, display.y
local x2, y2 = x1 + display.width, y1 + display.height
draw.roundedrect(x1, y1, x2, y2, 10, display.color)
local w, h = draw.stringsize(display.title)
local x = x2 - 10 - w
local y = y1 + (display.height - h)/2
draw.string(display.title, x, y, draw.black)
end
function drawButton(b)
draw.setfont('Helvetica', 18)
draw.setlinestyle(2, 'butt')
local x1, y1 = b.x, b.y
local x2, y2 = x1+b.width, y1+b.height
draw.roundedrect(x1, y1, x2, y2, 10, b.color)
local w, h = draw.stringsize(b.title)
local x = b.x + (b.width - w)/2
local y = b.y + (b.height - h)/2
draw.string(b.title, x, y, draw.black)
end
function drawButtons()
for i = 1, #buttons do
buttons[i].draw(buttons[i])
end
end
function lookupButton(x, y)
for i = 1, #buttons do
local b = buttons[i]
if x > b.x and x < b.x+b.width and y > b.y and y < b.y+b.height then
return b
end
end
return nil
end
function drawScreen()
draw.beginframe()
draw.clear()
drawDisplay()
drawButtons()
draw.endframe()
end
function touchBegan(x, y)
local b = lookupButton(x, y)
if b then
b.action(b)
end
end
function touchMoved(x, y)
end
function touchEnded(x, y)
end
function init()
draw.setscreen(1)
draw.settitle('Num Pad')
draw.clear()
draw.tracktouches (touchBegan, touchMoved, touchEnded)
createButtons()
createDisplay()
end
function mainloop()
while true do
draw.doevents()
drawScreen()
draw.sleep(30)
end
end
function main()
init()
mainloop()
end
-- start program
main()
非常感谢您提供的任何帮助!我知道这是很多问题,但这些知识确实可以帮助推动我前进!
答案 0 :(得分:2)
警告:此问题仅适用于已购买的Touch Lua用户 并了解绘图库
从什么时候开始购买东西来回答编程问题?无论如何,你所有的问题都是关于绝对的Lua基础知识。
“。”的用途是什么? “b”和“x”之间?还是“b”和“画画”?等...
点运算符用于索引表成员。因此,b.x
会为您提供属于表"x"
中的密钥b
的值。它为b["x"]
的语法糖。
表格如何设置按钮?请超级具体?
createButtons函数创建一个空表,并使用存储各种按钮属性的表b表示的按钮填充它。
为什么第7和第8行有“+”,“*”和“(j-1)”?
因为该程序的作者想要添加和增加。这里计算坐标b.x
和b.y
。使用(j-1)
是因为j
从1开始,但他需要从0开始进行此计算。
2 for循环将创建4行按钮,每行包含3个按钮,因为x坐标取决于参数j,而y取决于参数i。
那里的高度和宽度是多少?我以为只有x 和y。
按钮需要尺寸,而不仅仅是位置。由于b在for循环中被创建为局部变量,因此在此处设置其所有属性。它们可能会在以后更改。
点击按钮时按钮是如何知道的?具体是什么 代码行以及它是如何工作的?
您的主循环将在每个周期调用draw.doevents()
。所以在某些时候会有一个事件会导致touchBegan
被调用。
按钮本身不知道它被点击了。函数touchBegan(x,y)将通过调用lookupButton(x,y)来搜索其中一个按钮是否被x,y命中并调用其动作函数。 action是dotAction,digitAction或clearAction之一。因此,如果点击数字按钮,将调用digitAction(),例如。
帮自己一个忙,读一本关于Lua的书或者至少做一个Lua教程。潜入第三方图书馆。如果您不知道如何索引最常见的Lua类型或者+和*是算术运算符,那么您将很难理解代码,并且不会以任何方式提高效率。
答案 1 :(得分:1)
该程序特别使用表来表示按钮,这样做是为了使其更易于管理。高度和宽度是一样的。如果您不熟悉绘图库,那么查看这样的代码只会让您感到困惑。你的大多数问题实际上都是关于OOP的。
此问题也许现在不适合Stack Overflow。如果你想要帮助/关于这个主题的小教程随时可以在Touch Lua论坛上告诉我,我的用户名是warspyking,但是你需要修改或删除这个问题。