besiege吧 关注:85,444贴子:857,561

【干货】极其强大编程模组logic extension mod详细教程!!!!

只看楼主收藏回复

前言:在接触这个mod几天后,感受到这个mod的强大潜力,最近也出现了一些利用此mod的作品,故将自己对于这个mod的理解写成一篇简单教程,希望有大佬可是借此完成更完美的作品。因楼主接触besiege时间尚短(50h),如果有什么错误及不足之处请大家指出。可能前面比较枯燥,但看完后就会发现这是一个多么强大的mod。


IP属地:陕西1楼2020-03-29 16:43回复
    1. 简介
    Logic extension mod(逻辑扩展模组)是一款功能强大的模组,对于具有输出特性的零件(如自转块,齿轮,轮子,水炮等),可在0~最大值之间连续地调整力度大小,对于具有输入特性的零件(如角度计,高度计,探测器等),可读取到连续的高度/角度或其他数值,并增加了用不完的虚拟键位(1001~N(是四万还是四十万记不清了))使用此mod可方便的实现简单自动化控制。虽说此mod需要一定的编程能力,但零基础也无妨,我会尽量解释的清楚一些,简简单单一两行也可以实现原本很复杂的功能。


    IP属地:陕西2楼2020-03-29 16:43
    收起回复
      安装
      这部分就不多说了,创意工坊-搜索logic extension-订阅,创意工坊上不去的可以用网易UU加速器。


      IP属地:陕西3楼2020-03-29 16:44
      回复
        mod概述
        在真正开始搭建自己的自动化机械之前,让我们从整体认识一下这个mod。
        a) 连续输入输出
        首先,这个mod只有一个方块-cpu方块,因为我们后面才会讲到它,我们可以先把它看成一个黑箱,cpu方块接收一些方块(如高度计,角度计)的输入,经过内部处理后,再输入信息去控制其他方块,如何编写cpu处理程序我们下面再讲。

        在安装了mod后,我们在一些零件的编辑界面可以看到多出了lerp或fpio按键,凡是具有这两个按键的方块都可使用cpu方块对其进行控制。我们需要按下对应的按键,否则方块只能输入/输出0或1,无法输入/输出连续信号。举个例子,那轮子来说,我们只能控制它转或不转,但如果点选了fpio,就可以使用cpu方块使轮子的转速受我们的控制,它可以是0到最大转速之间的任何一个值。



        IP属地:陕西4楼2020-03-29 16:46
        回复
          b) 在哪写控制程序,在哪调试
          编辑模式下(小扳手是红色的)点击cpu方块,就可以打开编辑器(写代码的地方,这个编辑器真的很难用,无法撤销,所以千万不要误删代码,写完了要点下面的save保存),ctrl+k可以打开控制台(观察输出信息的地方)


          IP属地:陕西5楼2020-03-29 16:48
          收起回复
            c) 一些需要注意的问题
            重点:在这个mod中,cpu方块输入输出的数值都是位于0~1之间的数,那么他是如何换算的呢,其实就是 目标值(检测值)/(最大值-最小值) 而已,举个例子,如果检测器的最大距离为1000,最小距离为0,如果我们在500处检测到物体,那么cpu接收到的数据就是0.5,cpu向外输出也是同理。
            其他暂时还没想到,关于各种零件需要注意的地方会在下面提到。


            IP属地:陕西6楼2020-03-29 16:48
            回复
              各种零件输入输出
              下面我们分类介绍可控制零件,各类别有重叠,希望不会混淆。其实,说白了无论是哪一类,每一个按键就相当于是一个输入输出,我们可以读取它“按下”了多少,并控制它应该“按下”多少。


              IP属地:陕西7楼2020-03-29 16:49
              回复
                a) 单按键输入类(活塞,水炮,小风扇)
                这类零件的特点是“单向”,也就是零件只能向一个方向运动/做功,如自转模块只能向一个方向转,水炮只能向前喷水等(不要跟我说可以设置成反向),对于这类零件,我们只需读取和控制它所对应的那一个按键“按下”了多少,就可以控制这类零件。
                拿水炮举例子(这个mod对于水炮有个bug,就是必须存在一个自动化方块(什么都可以,角度计速度计什么都可以),才能调节水炮,不过影响不大,基本上我们使用时肯定要要有自动化方块来做检测的,只是对演示有点影响而已)
                水炮设置:

                控制代码:


                IP属地:陕西8楼2020-03-29 16:52
                回复
                  测试:
                  out(0,0.1);

                  out(1,0.5);

                  out(1,1);


                  IP属地:陕西9楼2020-03-29 16:54
                  回复
                    接下来可能有小朋友要问了,你这个水炮力度不能动态修改呀!我们可以这样做,下面这个例子中,我们用as两个键控制水炮力度的增减,其中的delay延时函数是为了防止运行过快太卡,也可以更容易的看到输出结果(执行太快卡屏,楼主电脑太渣),初学者不用管函数是怎么写的,直接用就好。//后面的是注释,不用写。

                    上图代码:
                    varpower=0;//定义一个输出力度变量
                    functiondelay(time)
                    //延时函数,直接用就行
                    {
                    var ok=0;
                    setTimeout(time,function(){ok=1;});
                    while(1)
                    {
                    if(ok==1)
                    {
                    break;
                    }
                    }
                    }
                    while(1)//一个永不停息的循环
                    {
                    if(in(1)==1)//如果检测到A键按下
                    {
                    power=power+0.01;//输出力度+0.01
                    }
                    if(in(2)==1)//如果检测到S键按下
                    {
                    power=power-0.01;//输出力度-0.01
                    }
                    out(0,power);//将power传递给水炮
                    delay(0.1);//延时0.1s
                    print(power);//打印输出力度信息
                    }


                    IP属地:陕西10楼2020-03-29 16:57
                    收起回复
                      这样就可以实现手动调节水泡输出了。
                      接下来可能有小朋友要问了,你这个power数值越界了怎么办?办法其实有很多,比如当power大于1时,直接让power=0,或者设定一个步长,当power大于1时,将步长变为原来的负值,这样power+步长就可以使power缩小了,小于0时同理。这里就不写代码了。
                      活塞和小风扇也是同理,一模一样,活塞输出的是伸长的长度,小风扇是出力带线大小。


                      IP属地:陕西11楼2020-03-29 16:57
                      收起回复
                        上面例子的演示gif:


                        IP属地:陕西12楼2020-03-29 17:03
                        回复
                          来个人看看呀,来个回复继续更……


                          IP属地:陕西13楼2020-03-29 17:04
                          回复
                            好东西,追更!


                            IP属地:重庆来自Android客户端14楼2020-03-29 17:50
                            回复
                              b) 双线性输出类(轮子,齿轮,转向模块,转向铰链)
                              这一类相比上一类来说无非就是多了一个按键,如果我们只需要一个按键的功能(如只需要轮子正转的功能),只需要把另一个按键删掉(按键右上角垃圾桶标志)就好了,如果我们需要用到两个按键,那么控制方法与第一种有一些区别。
                              到这儿我们需要明白,我们输入输出的控制其实都是通过控制每一个“按键“来实现的,从这个角度来说,控制一个 轮子与控制两个对向放置的水炮并无差别。
                              以转向铰链来举例:
                              先设置转向铰链的键位,q和e,注意转向铰链必须才自回正模式下才可控制:


                              IP属地:陕西15楼2020-03-29 18:04
                              回复