您好我想在Computercraft中使用我的lua代码,允许用户通过右键单击顶部的显示器来打开/关闭红石信号,但我无法使其工作。
monitor = peripheral.wrap("top")
monitor.clear()
monitor.setTextColor(colors.red)
monitor.setCursorPos(1, 1)
monitor.setTextScale(1)
monitor.write("Hello")
function rubber()
monitor.setCursorPos(1, 2)
monitor.clearLine()
if rs.getOutput("right", true) then
monitor.write("Rubber farm is on")
elseif rs.getOutput("right", false) then
monitor.write("Rubber farm is off")
end
local event = { os.pullEvent() }
if event == "monitor_touch" then
if rs.getOutput("right") == true then
rs.setOutput("right", false)
else
rs.setOutput("right", true)
end
else
write("test")
end
rubber()
end
现在它显示的是'你好'而且我不知道如何解决它,任何人都知道如何解决?我也是Lua的初学者,所以我可能犯了一些非常简单的错误。感谢
答案 0 :(得分:2)
local event = { os.pullEvent() }
if event == "monitor_touch" then
os.pullEvent
返回一个元组。在您的代码中,您将此元组打包到表中。那没关系,但是你将那个表与一个字符串进行比较。表不能等于字符串 - 它们是表。要么不将元组打包到表中,并保留第一个返回值(类型):
local event = os.pullEvent()
if event == "monitor_touch" then
比较时提取第一个元素
local event = { os.pullEvent() }
if event[1] == "monitor_touch" then
答案 1 :(得分:1)
问题是你想让这个函数无限循环,但你没有在你的函数之外调用你的函数....你也应该考虑使用while循环
while true do
//stuff here
end
只需添加
rubber()
到最后一个结束标记后的最后一行。
答案 2 :(得分:0)
你必须调用该函数。
rubber()
答案 3 :(得分:0)
你需要关闭你的功能
function rubber()
monitor.setCursorPos(1,1)
monitor.clearLine()
end
end
是你需要制作这个小词
答案 4 :(得分:0)
这是一个简单的修复,只需在完成功能橡胶后添加rubber(),因为在创建橡胶功能时,你还没有要求它启动。
答案 5 :(得分:0)
您应该使用“monitor_touch”事件。此外,请确保您使用的显示器是高级显示器(带黄色边框的显示器)。
如果您在理解活动方面需要帮助,请查看此页面:http://computercraft.info/wiki/Monitor_touch_(event)