有一些computercraft / lua代码有问题

时间:2014-04-06 16:44:43

标签: lua computercraft

您好我想在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的初学者,所以我可能犯了一些非常简单的错误。感谢

6 个答案:

答案 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)