2

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

4

6 回答 6

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
于 2014-04-06T16:49:44.360 回答
1

问题是你想让那个函数无限循环,但是你没有在你的函数之外调用你的函数......你也应该考虑使用 while 循环

while true do
 //stuff here
end

只需添加

rubber()

到最后一个结束标记之后的最后一行。

于 2014-07-14T07:31:12.727 回答
0

您必须调用该函数。 rubber()

于 2014-04-09T09:58:27.313 回答
0

这是一个简单的修复,只需在完成函数 Rubber 后添加 Rubber(),因为在创建函数 Rubber 时,您还没有调用它来启动它。

于 2014-12-19T15:47:44.527 回答
0

你需要关闭你的功能

function rubber()

  monitor.setCursorPos(1,1)

  monitor.clearLine()
end

end你需要做这个小词吗

于 2014-07-09T12:24:29.650 回答
0

您应该使用“monitor_touch”事件。此外,请确保您使用的显示器是高级显示器(带有黄色边框的显示器)。

如果您在理解事件方面需要帮助,请查看此页面:http://computercraft.info/wiki/Monitor_touch_(event)

于 2017-05-28T16:36:24.313 回答