我正在尝试查看我是否可以通过使用一个函数来简化输入,该函数产生多个输出以供另一个函数使用。有什么办法可以做到吗?我是否需要使每个输入返回单个变量的函数?
--here is a snippet of what im trying to do (for a game)
--Result is the same for game environment and lua demo.
en = {
box ={x=1,y=2,w=3}
}
sw = {
box = {x=1,y=2,w=3}
}
function en.getbox()
return en.box.x,en.box.y,en.box.w,en.box.w
end
function sw.getbox()
return sw.box.x,sw.box.y,sw.box.w,sw.box.w
end
function sw.getvis()
return true
end
function CheckCollision(x1,y1,w1,h1, x2,y2,w2,h2)
return x1 < x2+w2 and
x2 < x1+w1 and
y1 < y2+h2 and
y2 < y1+h1
end
if CheckCollision(en.getbox(),sw.getbox()) == true then
if sw.getvis() == true then
en.alive = false
end
end
print(tostring(en.alive))
我期望敌人(en)死亡(en.alive = false),但我遇到了错误:输入:25:尝试对零值(本地'w2')执行算术运算
答案 0 :(得分:1)
您可以在此处找到关于该问题的解释:Programming in Lua: 5.1 – Multiple Results
我建议您阅读整个页面,但这是相关的部分
不是列表中最后一个元素的函数调用总是产生一个结果:
x,y = foo2(),20-x ='a',y = 20
x,y = foo0(),20,30-x = nil,y = 20,30被丢弃
我建议进行以下更改以使代码正常工作。将getbox
的输出包装到一个表中,该表具有易于理解的明键。
function en.getbox()
return {
x = en.box.x,
y = en.box.y,
w = en.box.w,
h = en.box.w
}
end
function sw.getbox()
return {
x = sw.box.x,
y = sw.box.y,
w = sw.box.w,
h = sw.box.w
}
end
function CheckCollision(o1, o2)
return o1.x < o2.x + o2.w and
o2.x < o1.x + o1.w and
o1.y < o2.y + o2.h and
o2.y < o1.y + o1.h
end
或者,您也可以像这样“即时”包装getbox
的输出:
function CheckCollision(o1, o2)
return o1[1] < o2[1] + o2[3] and
o2[1] < o1[1] + o1[3] and
o1[2] < o2[2] + o2[4] and
o2[2] < o1[2] + o1[4]
end
if CheckCollision({en.getbox()}, {sw.getbox()}) == true then
if sw.getvis() == true then
en.alive = false
end
end
我强烈建议您优先选择最后一个选项。最后一个选项导致代码难以理解,并应附有清晰的注释来解释它。