我有一点问题,我是Lua和ComputerCraft的新手。所以我的问题是我太愚蠢了,无法编写if语句中的变量更改,因此我会将代码发布下来,希望您能帮助我解决这个问题
mon = peripheral.wrap("top")
modem = peripheral.wrap("right")
mon.clear()
mon.setCursorPos(1,2)
mon.blit("Pulverizer","0000000000","dddddddddd")
redstone.setOutput("right", true)
Pulverizer = true
mon.setCursorPos(1,4)
mon.write("Furnice","0000000","ddddddd")
redstone.setOutput("left", true)
local Furnice = true
mon.setCursorPos(1,6)
mon.write("Injection Chamber","00000000000000000","ddddddddddddddddd")
local Injection_Chamber = true
redstone.setOutput("top",true)
mon.setCursorPos(1,8)
mon.write("Metalurgig InFuser","000000000000000000","dddddddddddddddddd")
local Metalurgig_InFuser = true
redstone.setOutput("bottom", true)
while true do
event,side,x,y = os.pullEvent("monitor_touch")
if x > 1 and x < 11 and y == 2 and Pulverizer == true then
mon.setCursorPos(1,2)
mon.clearLine()
mon.blit("Pulverizer","0000000000","eeeeeeeeee")
redstone.setOutput("right", false)
Pulverizer = false
elseif x > 1 and x < 11 and y == 2 and Pulverizer == false then
mon.setCoursorPos(1,2)
mon.clearLine()
mon.blit("Pulverizer","0000000000","dddddddddd")
redstone.setOutput("right", true)
Pulverizer = true
end
end
Pastebin的链接:link to code
所以问题出在这部分代码
if x > 1 and x < 11 and y == 2 and Pulverizer == true then
mon.setCursorPos(1,2)
mon.clearLine()
mon.blit("Pulverizer","0000000000","eeeeeeeeee")
redstone.setOutput("right", false)
Pulverizer = false
Pulverizer变量不想从true更改为false,因此该代码无法立即激活
elseif x > 1 and x < 11 and y == 2 and Pulverizer == false then
mon.setCoursorPos(1,2)
mon.clearLine()
mon.blit("Pulverizer","0000000000","dddddddddd")
redstone.setOutput("right", true)
Pulverizer = true
我不知道为什么 这也是游戏中镜头的视频链接,因此您可以在视频中看到它变成红色但不再变为绿色
答案 0 :(得分:0)
不确定这是否可以解决您的问题,但是值得尝试调试一下。
出于良好实践的考虑,我建议您在第7行定义Pulverizer时,使用local Pulverizer = true
将其设置为本地。可能不会有所作为,但这是一个好习惯。以我的经验,避免使用首字母大写的变量也是一种好习惯。
第二,尝试像这样将if
块重新划分为2个块:
if x > 1 and x < 11 and y == 2 then
--Put some output message here or something so that you can see that it's entered this block of code and detected the cursor properly
mon.setCursorPos(1,2)
mon.clearLine()
if Pulverizer == true then
--Put another output message here so that you can see that Pulverizer is being evaluated as true
mon.blit("Pulverizer","0000000000","eeeeeeeeee")
elseif Pulverizer == false then
--Put one last output message here so that if Pulverizer is being evaluated as false you'll know
mon.blit("Pulverizer","0000000000","dddddddddd")
end
Pulverizer = not Pulverizer
redstone.setOutput("right", Pulverizer)
end
如果您在我已放置注释(灰色行)的位置插入调试消息,那么它应该可以帮助您缩小问题的范围,因为您可以看到输入的是哪些块,哪些不是。另一个好主意是在执行Pulverizer = true
或Pulverizer = false
之后立即放入一些代码,这些代码将显示Pulverizer
的值。
我对Computercraft的特定语法不太熟悉,因此不确定是否可以在聊天中显示消息或仅在监视器上显示消息以进行调试,但是您知道了。每当遇到问题时,都无法完全缩小范围,请尝试在代码中放置调试消息,以便您可以准确地了解正在发生的事情并从那里开始工作。如果您发现更多信息,请随时发表评论,我会再检查一下,看是否能提供更多帮助。
希望对您有所帮助,祝您周末愉快!