13841| 30
|
[教程] 如何在mind+里做一个可以和朋友在不同局域网进行联机的程序 |
本帖最后由 哎,就是玩 于 2022-1-29 15:39 编辑 相信不少人都玩过元气骑士吧。 就在近年,元气骑士推出了远程联机(测试版)模式 ![]() 那么我们能否在mind+里面设计一个类似的游戏并实现联机呢?答案是肯定的。 那么 mind+这样一个单人的编程软件如何做到远程联机? 这就需要MQTT消息了,我用的是easy lot,网址是https://iot.dfrobot.com.cn/index.html 各位想用 阿里云或者其他的也是可以的,原理不变 ![]() 注册好了之后呢就要设置服务器参数了(不要关闭网址,待会还有用) ![]() 在mind+里面添加扩展,依照上图 然后从网络服务里面找到MQTT初始化连接 ![]() 可以看到我们需要设置三个数据(我标记为A,B,C) 回到Easy lot 官网点击工作间 ![]() 然后点击加号添加两个新设备名为(x坐标,y坐标(这个是用来好区分的,没啥实际意义)) ![]() 然后将两个设备底下那一串字母粘贴到刚刚初始化MQTT参数的那个“C”位置(见上图) ![]() 然后将这两个码分别粘贴(lot id 粘贴到A,lot pwd 粘贴到B)(点击小眼睛可查看,直接复制也行) ![]() 这样做之后我们就完成了最基本的设置 接下来,正片开始 首先创建3个角色,两个人物,(随意人物),一个按钮 ![]() 在两个角色头上加上自己和队友的标识,方便辨认(不加也行能看出来就可以) ![]() ![]() 然后切换到自己的那个角色,开始编程 首先是万年不变的行走 ![]() 别问为啥这么复杂,问就是贼丝滑。(嫌费事可以弄简单点也没事) 接下来重点来了(也是难点建议多看几遍) ![]() 创建两个变量,分别为本机代码和对方机代码 这个是怎么个用法和干啥的,一会会解释 ![]() 然后就是循环执行,将x坐标发送到topic0也就是我们刚刚在Easylot里创建的设备x坐标 将y坐标发送到topic1也就是设备y坐标 这时候重点来了,为什么要加本机机号,这是为了区分自己和你联机的人发送的消息 由于这个消息的特性,你自己发的消息也会再次被接收一次,那么 如果双方都在发x坐标,y坐标,怎么分清楚是谁发的? 那不就乱了吗 所以要加上本机代码加以区分 至于这个发送的消息怎么被解析,后面会讲。 接下来转到角色“按钮”进行编程 ![]() 把刚刚设置好的那个MQTT初始化参数模块复制到这里来, 按照图示进行编程注意,正在进行连接一定要单独放置, 否则会先提示正在连接再发起连接,(这样费时间) 然后设置本机代码为随机数那个模块,设置的随机数要在100到999之间 为的是让代码固定为3位数(方便后面进行解析) 然后提问请输入对方机代码, 这时候输入的对方机代码是为了后面对接收的消息进行解析用的(很重要) 类似于房间号码 下面转到“队友”角色进行编程 这块有点小复杂,可能会看不懂,多看几遍就好 ![]() 这个就是解析代码,他的作用就是判断是否是你联机的对象发来的消息 并且将x、y坐标同步成为对方的x、y坐标 上面那个程序是x坐标,下面那个是y坐标,这个不多做解释了 可以看到条件是截取MQTT消息从1--3个字符, 这个就是截取了我们刚刚设置的对方机的代码(这也就是为什么一定要固定双方代码的位数了) 解析完毕后判断,如果等于设置的对方机代码,那么这条消息就是联机的人发过来的, 那么这个时候就可以将MQTT消息截取从第4--倒数第1个字符了(也就是截取出了发送的坐标) 下面y坐标的程序也是这样设置就可以。 到这里主干就做完了。 这时候我们可以做个试验,把对方机代码设置为本机代码, 这时候相当于你在和自己联机,如果发现角色“自己”与角色“队友” 保持一致,那么恭喜你,你成功了 |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed