欢迎光临散文网 会员登陆 & 注册

【系列】潜水党的简单lua教程一

2023-06-12 15:45 作者:未晞_a  | 我要投稿

原本打算在贴吧发的,但帖子发出去就被删了,原因我也不清楚,最后还是决定在b站发一下,还是希望可以帮助那些有兴趣的新人来入坑lua作图。


其实贴吧里也有不少lua作图的教程了,包括ydwe的官博也有lua的入门教程。

但实际上我在当初看这些内容的时候也是一知半解,完全不知道从什么地方下手。

本人潜水多年,当初在小白阶段也从贴吧学到了许多知识,因此想着有机会回报一下米娜桑。

帖子的内容也基本都是个人理解,如有错误可以指正。

 

关于lua作图的一些基本知识,这些也都有许多人讲过,可以在吧内搜索lua关键词找到相关帖子,这里我不再重复。

 

最萌小汐提供的lua作图教程链接:https://tieba.baidu.com/p/2878085567?pn=1

此教程仅提供了如何使用编辑器来进行lua代码的编写。

 

这里我便提供如何在其他工具中写好lua脚本,然后导入地图的方法。

 

能够编写脚本的工具有很多,这里我只推荐三个工具:

记事本:这个基本大家的电脑内都会自带的。

Notepad++:支持多开文本,批量替换字符等等功能,我经常用于编辑单个文件。

Vs code:主要的代码编辑器,个人看法是notepad++的上位替代品,相对于notepad++来说要复杂一些。

 

长话短说,之后就是vs code的作图环境配置了。

首先是中文化界面方法:https://jingyan.baidu.com/article/64d05a023e7a479f54f73b03.html

其次是学会如何安装插件:https://jingyan.baidu.com/article/cdddd41caac56512ca00e113.html

 

上面两篇教程看完之后,就需要安装以下两个插件:


还有两个可选插件建议安装:


这两个其实也不是可选吧,我个人觉得其实是必选插件。

至少安装完了之后写代码确实很方便。

 

作图环境配置完成之后,就可以开始作图了。

 

然后这里提一下w3x2lni这个工具。

当你通过编辑器新建一张w3x地图文件之后,便可以用w3x2lni工具来将地图文件进行解包/优化/打包。

可以通过官博的下载页面来下载w3x2lni这个工具。

使用方法也很简单:

将w3x文件拖进去,点击第一个lni按钮就可以将地图文件解压成一个新的目录文件夹。

将目录文件夹拖进去,点击第三个obj按钮就可以将文件夹打包成w3x地图文件。

非常的快捷方便。

 

Ydwe官博:http://www.ydwe.net/


以上内容全部了解完毕之后,便是我踩过的一些坑,用于提醒还未了解的新人。


英萌下载链接:https://github.com/actboy168/MoeHero

打不开看这:https://pan.baidu.com/s/1wgD_gNGjzPinZMfD_3CfVg

提取码:ec4e

 

首先,新人不要去尝试看英萌的代码,英萌本身的门槛是很高的。

尤其是英萌的代码里并没有写很多注释。

如果你只是新手,然后想要通过学习英萌里面的东西,来提高自己对于lua作图的理解。

那这其中困难程度不亚于让你以小学三年级的水平去解大学的方程式。


我不否认有的人就是天赋异禀,理解能力高超,自学三天不到就成为巨佬。

但你怎么肯定,那个人就是你呢?

当然了,这里并不是说让你们不要去看。

而是说,等你以后技术进步了,再回过头去看英萌,这样才能让你有更多的收获。

与其去看你们根本无法理解的英萌,不如先了解一下lua这个轻量化的脚本语言如何?

 

首先是变量使用规则:

1、可以包含字母、数字、下划线,但不能以数字开头。

 

例:

a1 = 1

1a = 1

-- 其中 1a会报错,并且无法成功赋值。

 

2、变量名区分大小写,即x与X是完全不同的两个变量。

 

例:

x = 1

X = 2

print(x, X) -- 输出结果:1, 2

 

3、变量名的长度没有任何限制。

 

例:

abcdefghijklmnopqrstuvwxyz = 1

print(abcdefghijklmnopqrstuvwxyz) -- 输入结果:1

 

 

4、变量不需要去声明类型,jass里需要以类型+名称的方式来声明。

 

例:

// integer是jass里的整数类型

Jass:integer num = 1 


-- 无需类型即可直接声明

Lua:num = 1 

 

5、变量可以在任何地方声明且赋值。

lua的变量想在哪里写就在哪里写,而jass不同。

 jass里全局变量需要在globals范围内声明,局部变量必须在函数内顶部声明。


例:

全局变量:

globals

integer num

endglobals


局部变量:

function init takes nothing returns nothing

 // 必须在函数内先置顶声明,否则报错无法运行

local integer num

num = 1 // 再赋值

endfunction

 

6、全局变量可以不用声明便可以直接使用,但会直接返还为nil。

 

例:

print(num) -- 输出结果:nil

 

nil等于jass里的null,等于触发器里的没有单位、没有技能、没有XX。

也可以理解为空。

 

7、变量可以被重新声明为新的类型。

 

例:

local num = 1

print(num) -- 输出结果:1

 

local num = ‘王大锤’

print(num) -- 输出结果:王大锤

但这样反复的重新声明为新的类型,在地图代码逐渐增多之后,会导致你根本记不清当前变量到底是什么类型,所以尽可能的避免且少用重新声明。

 

同时lua里面提供了一个type函数,它的作用是将变量的类型转换为字符串

 

例:

num = 1

print(type(num)) -- 输出结果:number (类型:数)

-- 在lua里面,没有整数(integer)和实数(real)的概念,整数和实数统称为数,即number

 

num = ‘王大锤’

print(type(num)) -- 输出结果:string(类型:字符串)


8、应当尽可能的避免使用全局变量,改用局部变量

频繁使用全局变量,亦有可能会导致命名冲突的问题,且lua的变量命名无需填写类型,更是加大了这种错误产生的概率。


直接编写代码与触发器的区别就在于,代码的容错率很低。


9、局部变量的一些解释

ydwe里提供的逆天局部变量,严格来说并不能算真正意义上的局部变量,当然这个说法也不一定对,只是我个人的一些浅薄理解。


总之如果之前习惯了用逆天局部变量的人,一定要改变一些使用习惯。


原本的ydwe里面,逆天局部变量可以做到:

if (条件为真) then

loc_a = 触发单位

else

loc_a = 技能目标

end

(这里的示例是随便写的,大概是这么个意思。)


这个时候你输出 loc_a 会得到 (触发单位 or 技能目标 )任意其一

但如果你在lua里面写:

if (true)then

local a = 触发单位

else

local a = 技能目标

end

这个时候你输出 a 只会得到(nil),即空。


正确的写法如下:

local a = 技能目标

if (true) then

a = 触发单位

end

这样你就能得到 (触发单位 or 技能目标 )任意其一

因为你在if条件里面定义的局部变量,在外面是获取不到的,你只能先声明,再定义。


今天就先更这些,其他的暂时没想到,等下次更新再补上。

【系列】潜水党的简单lua教程一的评论 (共 条)

分享到微博请遵守国家法律