lua入门 | 您所在的位置:网站首页 › lua语言 › lua入门 |
一、为何要用lua 本章介绍热更新与lua的关系,知道了lua有什么作用才能在之后的学习里更有动力~ 1、为何需要热更新开发者开发游戏时,通常会使用c#或者c++等 体量庞大的语言,因为其功能库多,使用方便,能够构造出复杂的系统。但身为一门编译型语言,编译的过程在移动平台无法完成,运行之前需要通过开发者编译后打包,才能分发给玩家游玩。 假如你开发了一款游戏,刚上架应用市场,BUG反馈铺天盖地。 你改好了BUG后重新打包,上传应用市场。而玩家又得从应用市场将整个游戏重新下载安装。本来就被BUG折磨的玩家望着一个小时的下载时间,果断弃坑。 为了拉高玩家留存率,提升活跃度,让游戏死得不那么快,我们需要一个小巧轻便的更新方式,避开c#的编译。 2、为何热更需要lua要解释这个问题得先明白编译性语言与脚本语言的区别: 编译性语言编译性语言在编译后,可脱离环境运行需要通过虚拟机编译成汇编代码,才能供各个平台执行。随着打包的完成,程序不能进行修改。写好的代码->编译成.dll扩展程序->平台执行脚本语言脚本语言必须安装对应的脚本环境脚本语言在有虚拟机的情况下,可以直接解释执行。lua代码在运行时才编译,不运行时和文本无异。写好代码->平台中的虚拟机执行所以热更新的方式有很多种,编译性语言和脚本语言都可以。 可以把c#代码编译成独立的dll,上传服务器,玩家启动游戏时从服务器上下载dll文件,达到热跟新的目的。但这样的更新容易给系统带来安全隐患,部分系统不允许这样的热更,为了安全起见,不能给程序太强的能力。 这个时候lua就能发挥其优势了,身为脚本语言,lua在运行时才会被动态解释,在没运行时就是一个普通的资源文件。可以很方便的传输,且不容易被平台禁止。 3、lua如何实现热更前文说到,脚本语言需要在环境内内嵌虚拟机,在游戏运行时动态解析脚本。对于lua的解析,市面上有许多解决的框架,比如tolua、xlua、ulua、slua等等,有了这些框架,就不用担心虚拟机运作的问题,可以很方便的使用lua脚本进行热更新的处理了。 二、lua入门对为何要使用lua有了一定的了解,接下来是lua的基础使用。鉴于网络上的教程众多,这里只列举lua特性,对其特点进行归纳,做一个简洁的版本。如果需要更系统的学习,可以去菜鸟网学习Lua 教程 | 菜鸟教程 (runoob.com) 1、lua语法(1)变量定义 lua是弱类型语言,不需要为变量定义数据结构,只需要为变量赋值即可。 按照变量的作用域来划分,lua有三种数据类型:全局变量、局部变量、表中的域。 全局变量:变量默认为全局变量,除非明确声明为局部变量。局部变量:变量指定类型为local时,其范围约束在函数范围内。表字段:这是一种特殊类型的变量,可以保存除nil之外的任何内容,包括函数。function test() a = 5 --全局变量 local b = 6 --局部变量 end text() print(a,b) --5,nil(2)数据类型 lua的变量有8个基本类型:nil、boolean、number、string、userdata、function、thread 和 table,可以通过type()函数查看变量的数据类型。 print(type(nil)) --> nil print(type("Hello world")) --> string print(type(10)) --> number print(type(print)) --> function print(type(true)) --> boolean local a = {} print(type(a)) --> table(3)运算符 算数运算符 运算符描述+两个操作数相加-第一个数减去第二个数)*两个操作数相乘/两个操作数相除%取余^幂运算-否定/复数关系运算符 运算符描述==检查两个操作数是否相等~=检查两个操作数是否不等>大于=大于等于10) then print("a大于10") elseif(0>a and 10 |
CopyRight 2018-2019 实验室设备网 版权所有 |