lua - if 语句中的计算机技术变量
问题描述
我有一个小问题我是 Lua 和 ComputerCraft 的新手。所以我认为我的问题是我太愚蠢了,无法编写 if 语句中的变量更改我将发布我的代码希望你能帮助我解决这个问题 thx
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 的链接:链接到代码
所以问题出在这部分代码中
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
而且我不知道为什么这里还有一个来自游戏内镜头的视频链接,所以你可以在视频中看到它变成红色但不再变成绿色
解决方案
不确定这是否会解决您的问题,但值得尝试调试一下。只是为了良好的实践,我建议在第 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
如果您在我放置注释的地方(灰色行)插入调试消息,那么它应该可以帮助您缩小问题范围,因为您可以看到正在输入哪些 if 块,哪些没有。另一个好主意是在你这样做之后立即输入一些代码,Pulverizer = true
否则Pulverizer = false
会显示Pulverizer
.
我对 Computercraft 的特定语法不是很熟悉,所以我不确定您是否可以在聊天中显示消息或仅在监视器上显示消息以进行调试,但您明白了。每当您遇到无法缩小范围的问题时,请尝试在代码中放置调试消息,以便您可以准确地看到正在发生的事情并从那里开始工作。如果您发现更多信息,请随时发表评论,我会回来查看是否可以提供更多帮助。
希望这对您有所帮助,周末愉快!
推荐阅读
- python - how to add location constraints for an object in blender?
- android - 如何在 Android Studio 中显示稳定版本(项目结构)
- javascript - 单击其中的按钮后如何淡出div?
- react-router-dom - 在测试服务器上加载不同的路由而不是在主服务器上?
- python - 如何在带有泡菜的 postgresql 数据库中插入序列化对象?
- powershell - 在不停止程序的情况下处理 ADIdentityNotFoundException
- c# - EPPlus 饼图可数据重叠问题
- html - 如何使用 vba 获取网页的标题?
- pentaho - pentaho 勺子:如何有条件地将值插入列?
- php - 带有2个数组的php natsort