Lua/Computercraft 既可以监听也可以作为函数?
2014-1-17 19:13:44
收藏:0
阅读:161
评论:3
我正在尝试使用Computercraft在Tekkit上制作计算机系统/网络。
Computecraft是一种基于Lua的修改版,可在Minecraft/Tekkit和其他修改版包中运行。
基本上,我目前正在使用无线路由器执行以下操作:
rednet.open('top') -- 打开与无线路由器的连接
print ("test")
input = read()
rednet.receive() -- 监听发送/广播的消息
if message then
print (message)
end
我尝试对所有我的系统进行更改,就像这样:
rednet.open ('top')
-- 执行所有正常操作
rednet.receive()
if message == "Lock202" then
os.pullEvent = os.pullEventRaw
term.clear()
term.setCursorPos(1,1)
print ("警报进行中,终端已锁定")
end
在执行所有正常操作时,我希望用户能够导航和使用计算机的功能。但是当调用 rednet.receive() 时,它会冻结并等待传入的消息。
我希望它在后台运行,仅在接收到消息时才执行操作。
我已经尝试查看文档、帮助站点,并思考将这个问题带到SO,因为有许多可用的Lua程序员。
点赞
用户3189167
parallel.waitForAll()
这是一个基本可以多线程运行你的程序的函数... 所以你可以这么做...
function listen()
while true do
id, msg, distance = rednet.receive()
FUNCTION_THAT_RUNS_STUFF(id, msg, distance)
sleep(1)
end
end
function main_loop()
while true do
--在此处执行其他操作
end
end
--文件末尾运行所有内容
parallel.waitForAll(listen, main_loop)
2014-01-13 06:24:09
用户4378313
我所做的是让一台PC运行os.pullEvent,而其他一些PC则收集信息并通过rednet发送信息,这使得只有一台PC像这样被卡住,尽管其他的PC基本上是无法使用的。当然,如果您像我所做的那样,您可以使它检测键盘按键、rednet_message等等。
2014-12-19 15:42:12
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
命令rednet.receive()可以在其参数中有一个参数,即 "超时"。
这是以秒为单位测量的。它也是一个浮点数(十进制),例如 4.50、1.23 等。
这意味着它将在该段时间内接收消息。
完成您想要的一个很好的方法是让另一台计算机不断接收消息,然后向您想要进行模块接收并编写类似以下内容的内容的计算机提供一个红石信号
`` ` 函数检查() 如果rs.getInput("back") then local id,message = rednet.receive(5) print("接收消息") 结束 结束
`` `
另一台计算机将执行以下操作:
`` ` computerid = 50
id,message = rednet.receive() rs.setOutput("后面",true) 睡眠(1) rednet.send(computerid,message) rs.setOutput("返回",false)
`` `
computerid 将等于您想要运行的初始计算机的ID。在运行代码时,您还必须定期使用 Check() 函数,除非正在接收消息,否则它不会影响计算机,在这种情况下,它将按“rednet.receive”的参数中指定的时间接收消息。
希望这很有帮助
--EwilDawe