gmod吧 关注:88,025贴子:1,902,178

[图文]e2萌新入坑教程

只看楼主收藏回复

贴吧里面的e2教程有蛮多的几篇了 而有些刚入坑的萌新还是不太理解 那我就试图以自己的理解来写一篇尽量简易的e2教程
PS.尽量图文 电脑配置不行 开个游戏好久
PSS.贴吧名字改不了了 要加好友就steam@Duck1yX64
PSSS.更新时间不定 尽量讲全


1楼2020-03-21 00:37回复
    食用此教程 你需要:对于wiremod的基础了解(wire的概念及如何连线) 对于gmod操作的基础了解


    2楼2020-03-21 00:39
    回复
      一、啥是e2
      E2 在游戏内显示为Expression 2(中文译名表达式2)
      默认模型就是一块芯片 功能正如其貌及其名
      通过编写表达式(也就是代码) 从而使wiremod运行每一条代码所对应的功能 从而在游戏内做到你想要的效果
      用途能从最基础的定时炸弹 到电脑(github@AlexALX)
      所以 学好e2 是在wire这条路上越走越远的一个必要条件


      3楼2020-03-21 00:43
      收起回复
        厉害


        IP属地:天津来自Android客户端4楼2020-03-21 00:56
        回复
          优秀的教程内容


          IP属地:天津来自Android客户端5楼2020-03-21 00:56
          收起回复
            截图分别对应e2工具位置 以及e2的样子



            6楼2020-03-21 01:10
            回复
              二、第一个e2项目
              做一个rgb灯(暴力的)
              首先打开e2编辑器 (拿着e2工具对着地面右键)
              界面如下

              如果你是第一次打开e2编辑器 那么它大概就是这个样子的

              我们现在只用得到这些功能 其它先不作介绍


              7楼2020-03-21 01:19
              回复
                首先 了解一下代码部分
                先看这一部分的

                @name 指的是打下来e2所显示的名称
                比如说我写的是@name rgb light 那么游戏里面就是这样的

                @inputs 这一条是用来定义输入量的 我写的是@inputs R G B 游戏中就是这样(手上拿着wire工具)
                PS.记得要注意大小写 第一个字母大写的才是变量名称 而且多个变量名字之间用空格分隔(所谓变量 就是一个会变化的量 就是数学公式里的xyz)
                PSS.但是实际上不能这么写 因为这样只是让e2获得了输入的R G B的数据 并不能改变灯的R G B数据 所以要输出

                @outputs 就是所谓的输出量了 我写的是@outputs R G B 游戏里就是这样的
                PS.这回是写对的 输出R G B 从而就能改变灯的颜色

                @persist 就是不用于输出 也不用于输入的一些变量 都需要在这里写上
                PS.当然此次项目是不需要用到的 以后深入一些的项目会用到的
                @Trigger 这个没啥用处 可以忽略


                8楼2020-03-21 01:35
                收起回复
                  直到这里 我们就可以开始编写主要的代码部分了
                  你的代码目前应该看起来像这个样子


                  9楼2020-03-21 01:39
                  回复
                    太强了 支持教程贴


                    IP属地:广东来自Android客户端10楼2020-03-21 01:50
                    收起回复
                      所谓的输入量与输出量就像wiremod物体的输出输入属性一样
                      而在e2里 你可以定义为你自己想要的样子
                      比如我们这里要实现一个rgb灯 就需要输出3个量 分别对应light的Red Green Blue
                      再关于变量 上面我一句话带过了 其实这真的就是像数学公式里面的未知数xyz
                      你想要改变这个未知数的值就要“赋值” 就是给这个未知数一个值(数学内就是x=一个数字)
                      而在e2中的赋值代码呢 就是 变量名 = 一个数据
                      而到了这里呢 又要扯到变量类型了
                      e2中较为常见的变量类型有Number(在@outputs中并没有写成R:number 这是因为e2默认变量类型就是Number)
                      Vector(三维数据 可以表示游戏里的一个坐标位置 也可以来表示三个变量的一个合集 例如本项目中的颜色啊 力啊 等等 要在e2中表示 就是vec(Number,Number,Number)
                      在light的输入量中 除了Red Green Blue 你还会找到一个叫RGB[Vector]的属性 没错 这就是三维数据
                      如果你需要在e2中实现一个简便的输出 那就可以把@outputs R G B改成@outputs RGB:vector 为了说明这个RGB变量是vector类型的 而不是默认的变量类型number)
                      Vector2(二维数据 vector的亲弟弟 就是少了一个量 在e2中表示 就是vec2(Number,Number) 现在暂时用不到)
                      Vector4(四维数据 vector的亲哥哥 就是多了一个量 在e2中表示就是vec4(Number,Number,Number,Number) 一般用来表示颜色 不过现在也用不到)
                      Angle(角度数据 要来在e2中表示这么个角度数据 那就要用代码ang(Number,Number,Number)
                      乍一看有点像vector的表示对吧 但是在本质上并不是 角度是单独分开的 并不能用vector表示 vector也不能表示一个角度数据
                      而这在我们的rgb项目中暂时用不到 以后再说 这个类型有的讲了)
                      String(字符串数据 蛤? 你问我什么是字符串 把这个词语拆分一下 就变成了字符 串
                      打个比方 比如说 汉字“看” 汉字“教” 和 汉字“程”是一个烤串上的肉 那么字符串这个类型的数据就变成了串起这些肉的一个串串 而串完之后 这就是一个字符串数据了
                      要在e2中表示这个类型的数据 需要像这样 "Hello World"
                      注意双引号是英语的 用中文的双引号e2是无法识别的)
                      Entity(实体数据 这个有的讲了 和Angle一块放到以后讲 现在用不到的)
                      至此 e2的变量类型就讲得差不多了 如果没怎么看懂 在此楼下面回复 我会回答的
                      以后讲到的时候 我还会重复讲的 所以暂时安心 rgb灯的主代码部分明晚更新


                      11楼2020-03-21 02:00
                      回复
                        踏出你在e2之路上的第一步吧!
                        第一行 我们来写一个interval(10) 表示的是每10ms(毫秒 1ms = 0.001s 此处10代表10ms 是interval函数所能接受的最小数据 如果1ms那也行 但没意义 效果跟10ms一样)就运算一次 注意 这里的运算是指除了所有带着@的代码从头到尾运行一遍 如果你追求更快的速度 也可以使用runOnTick(1) 就是说每游戏刻(Tick)计算一次 跟interval(10)差不多 看你个人喜好
                        其实速度越快 到了以后的代码中 如果逻辑复杂起来了 那么很容易Tick quota(运算超时 wiremod原作者害怕玩家用e2来炸服 就整出来那么个玩意儿 如果运算量过大自动停止e2运作) 但是就那么个简单的rgb灯芯片是不会的 所以暂时放心用吧
                        注意 如果你不加上这一行 那么你的芯片将只会运行一次! 也就是说light不会有任何的变化!
                        第二行 写一个R = random(255) 好了 可能你有点懵逼了 没关系 一个字一个字慢慢来分析
                        首先是R = .... 这就是我在11楼中所说到的赋值 给R变量(outputs中声明过的输出量)一个数据 并使它等于这个数据
                        第二 我们来看random(255) 这是一个功能性的代码 random顾名思义 随机 而这个就是生成一个随机数的意思 括号里的255代表我们将输出一个0-255范围内的随机数
                        PS.可能有过编程基础的会说:随机数种子呢??? 在e2里是不需要的 每次都是一个全新的随机数
                        还有 为什么是255呢 我random(1000)不行吗??? 抱歉 真的不行
                        rgb颜色值最多255(二进制11111111) 白光就是(255,255,255) 黑光就是(0,0,0)(根本没有颜色组成)
                        第2-4行 我们可以这样写:
                        R = random(255)
                        G = random(255)
                        B = random(255)
                        就是给每一个要输出的量都等于一个0-255范围的随机数
                        你的所有代码就应该看起来像这样:

                        好了 恭喜你 你已经完成了rgb灯项目的e2部分了
                        接下来打在地上 与light连上线(R连light的Red G连light的Green B连light的Blue) 看看效果吧!


                        12楼2020-03-21 02:24
                        回复
                          关于11L中 我提到的RGB:vector改进
                          可能你们想要代码短一点 而不像这样每行又短 行数又多
                          那就把@outputs R G B替换成 @outputs RGB:vector (这样就把输出的三个Number变量 变成了一个Vector变量)
                          那么2-4行咋改呢
                          删光 然后写入RGB = vec(random(255),random(255),random(255))
                          正好符合我之前说的vec(Number,Number,Number)的表示
                          可能你想问:RGB = random(255)为啥不行
                          注意 random(255)返回的是一个Number数据 而你的RGB是一个vector变量
                          这两个数据类型都不对 更不会等于 所以当你打下去时 e2会报错的
                          just like this


                          13楼2020-03-21 02:32
                          收起回复
                            有人吗 有的话就继续了


                            14楼2020-03-21 15:15
                            回复
                              好 继续更新
                              先去整几张截图


                              16楼2020-03-21 15:22
                              回复