1_lua语言学习_一周内学会手游脚本开发

1. 课前准备

  1. 编辑器:sublime (其他文本编辑器都可以,这里不做推荐)
  2. 安装lua(仅为学习语法时使用,测试脚本不用本地安装)
    • 安装教程:参考菜鸟教程的方法:https://www.runoob.com/lua/lua-environment.html
      直接下一步安装就行了。
    • 验证安装是否成功:打开控制台,输入lua,进入到lua交互界面。
      在这里插入图片描述
      输入测试代码:print("hello world")
      输出 hello word -> 安装成功!

2. lua语法学习

这里只讲我们开发手游脚本用得到的语法,不涉及lua的元表这种实现面向对象的用法。
想要深入学习的话可以参考:

  • lua 的 官方文档
  • lua教程|菜鸟教程
  • lua教程|w3cschool
    Lua 是一门动态类型语言。 这意味着变量没有类型;只有值才有类型。 语言中不设类型定义。 所有的值携带自己的类型。 这和python一样,有python基础的同学学起来毫无压力,没学过python的同学也没关系,lua对你来说同样很简单。

变量

lua中的变量默认是全局变量,代码里使用过多的全局变量会导致作用域混乱,容易出现变量值被覆盖的问题,建议编写脚本时尽量使用局部变量,小哥刚接触 lua 的时,一直都是用的python语言,刚写lua时踩过的坑,告诉大家。
如:local a = 1 ,声明一个局部变量a, 并赋值为1。

数据类型

lua中有八种基本类型: nil, boolean, number, string, function, userdata, thread, table
其中,userdata和thread我们写脚本用不上,这里不介绍。剩下我们只需要学习6种。

nil

表示一个有意义的值不存在时的状态,一个变量赋值为nil就相当于把这个变量删除,任何未被申明的变量,打印都为nil。
示例:如下图
在这里插入图片描述

boolean

boolean 类型只有false 和true 两个值。
nil 和 false 都会导致条件判断与假, 其他的任何值都表示真,这和其他语言的判断不一样,注意一下。

number

number 代表了整数和实数(浮点数)。

string

表示不可变的字节序列,可以理解为表示一串文字就好了。

function

函数类型,函数就是一段代码封装起来,实现一个具体的功能,比如,print 函数可以帮你把输入的内容打印在控制台上,print也是一个变量,只不过这个变量的数据类型是function, 这个变量也叫函数名,函数名加上()代表执行这个函数。所以print('hello world') 代表把"hello word" 这个字符串,打印在控制台上,“hello world” 就是作为参数传递到函数print 里。

函数的定义

function 函数名(参数列表)
	语句块
end

示例:定义一个函数,输出传入的参数

function func(a, b)
	print(a, b)
end

func(1, 2)  -- 1, 2
func(nil, 2)  -- nil, 2
func(1, nil)  -- 1, nil
func(true, false)  -- true, false
table

这里是重点,table作为lua语言中唯一的数据结构,他可以用来表示普通数组,字典,等结构,并且可以混着用,但是小哥强烈不建议混着用,因为迭代(遍历)起来会有坑,不展开,大家记着就行。
cookie: lua中--代表行注释

-- 数组table, 把他当作普通的数组用就行
	-- 申明并初始化 1, 2, 3, 4, 5
		local arr = {1, 2, 3, 4, 5} 
	-- 申明,后续往数组里添加元素
		local arr2 = {} 
		table.insert(arr2, 1)  
		table.insert(arr2, 2)
		table.insert(arr2, 3) 
		-- 最后得到 {1, 2, 3}, 这里的insert相当于python中的apped。
		print(arr2[1])  -- 1
		print(arr2[2])  -- 2
		print(arr2[3])  -- 3

-- 字典table
	-- 基本上和普通的字典没区别
		- 申明并初始化
			local dic = {sex="男", name="杨小哥"}
		- 申明,后续增加元素
			local dic2 = {}
			dic2.sex = "男"  -- 不要奇怪,和dic2["sex"] = "男" 等价
			dic2.name = "杨小哥"  -- 等价于 dic2[“name"] = "杨小哥"
			print(dic2.name)  -- 杨小哥
			print(dic2.sex)  -- 男

这里只介绍创建,迭代表元素下面说讲。

循环控制

lua中的循环控制语句这里只介绍,while 语句和for 语句,足以覆盖脚本的开发需求。

while 语句

和其他语言的用法一致,这里讲下语法。

while 真值表达式  do
	语句块
end
for 语句

for 循环语句有2种形式。

第一种
for i=start, stop[,step] do
	语句块
end

类似于python 的 for i in range(start, stop[,step]), [, step] 代表可省参数。
示例:

for i =1, 10, 2 do
	print(i)
end

-- 输出
1
3
5
7
9

说明:lua的下标是从1开始的, lua作为一门小众语言,最开始是开发出来给工人们使用的,为了降低工人的学习成本,数组下标就延续了人类的习惯,从1开始。

第二种
for i, v in ipairs({10, 20, 30, 40}) do
	print(i, v)
end

-- 输出
1	10
2	20
3	30
4	40

ipairs 函数,用来迭代数组table,数据类型里有提到,table可以存数组和字典结构,但是不建议混着用,这个例子专门迭代数组table。

第三种
for k, v in pairs({name="yang", sex="男"}) do
	print(k, v)
end

-- 输出
name	yang
sex     男

pairs 函数,用来迭代字典table,用ipairs迭代字典是取不到元素的。但是用pairs迭代数组可以取到元素,但不保证顺序。

写脚本的时候注意这两点就行了,不混用就不会有问题。

模块和包

模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。

Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。以下为创建自定义模块 module.lua,文件代码格式如下:

-- 文件名为 module.lua
-- 定义一个名为 module 的模块
module = {}
 
-- 定义一个常量
module.constant = "这是一个常量"
 
-- 定义一个函数
function module.func1()
    print("这是一个公有函数!\n")
end
 
local function func2()
    print("这是一个私有函数!")
end
 
function module.func3()
    func2()
end
 
return module

由上可知,模块的结构就是一个 table 的结构,因此可以像操作调用 table 里的元素那样来操作调用模块里的常量或函数。

上面的 func2 声明为程序块的局部变量,即表示一个私有函数,因此是不能从外部访问模块里的这个私有函数,必须通过模块里的公有函数来调用。

require 函数

lua 提供了一个require函数来加载模块,要加载一个模块,只要require(“模块名”) 就行了。
示例:
module_1.lua

require("module_2")

print(a)  -- 1
print(b)  -- 2
print(arr[1])  -- 1
print(arr[2])  -- 2
print(arr[3])  -- 3

module_2.lua

a = 1
b = 2
arr = {1, 2, 3}

总结

lua语法相关的这么些写脚本就够用了,如果有遇到问题可以借助搜索引擎,也可以加小哥的微信,帮你解答。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq767852841/article/details/106898304