lua
文章平均质量分 80
鱼儿-1226
离家千里,出了地铁口,万家灯火。
多年从事于音视频相关直播行业,使用 windows / linux系统,熟练使用c++、c#、opengl、unity3d、UE、cocos、ffmpeg、directshow、obs、鼠标键盘钩子、汇编、逆向(爬虫) 等。
展开
-
Lua 调试(Debug)
Lua 提供了 debug 库用于提供创建我们自定义调试器的功能。Lua 本身并未有内置的调试器,但很多开发者共享了他们的 Lua 调试器代码。Lua 中 debug 库包含以下函数:序号 方法 & 用途 1. debug(): 进入一个用户交互模式,运行用户输入的每个字符串。 使用简单的命令以及其它调试设置,用户可以检阅全局变量和局部变量, 改变变量的值,计算一些表达式,等等。 输入一行仅包含 cont 的字符串将结束这个函数, 这样调用者就可以继续向下运行。原创 2021-07-20 10:31:26 · 717 阅读 · 0 评论 -
Lua 错误处理
程序运行中错误处理是必要的,在我们进行文件操作,数据转移及web service 调用过程中都会出现不可预期的错误。如果不注重错误信息的处理,就会造成信息泄露,程序无法运行等情况。任何程序语言中,都需要错误处理。错误类型有:语法错误 运行错误语法错误语法错误通常是由于对程序的组件(如运算符、表达式)使用不当引起的。一个简单的实例如下:-- test.lua 文件a == 2以上代码执行结果为:lua: test.lua:2: syntax error near '=='原创 2021-07-20 10:30:56 · 1994 阅读 · 0 评论 -
Lua 文件 I/O
Lua I/O 库用于读取和处理文件。分为简单模式(和C一样)、完全模式。简单模式(simple model)拥有一个当前输入文件和一个当前输出文件,并且提供针对这些文件相关的操作。 完全模式(complete model) 使用外部的文件句柄来实现。它以一种面对对象的形式,将所有的文件操作定义为文件句柄的方法简单模式在做一些简单的文件操作时较为合适。但是在进行一些高级的文件操作的时候,简单模式就显得力不从心。例如同时读取多个文件这样的操作,使用完全模式则较为合适。打开文件操作语句如下:f原创 2021-07-20 10:30:21 · 173 阅读 · 0 评论 -
Lua 协同程序(coroutine)
什么是协同(coroutine)?Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。协同是非常强大的功能,但是用起来也很复杂。线程和协同程序区别线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作的运行。在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只有在明确的被要求挂起的时候才会被挂起。协同程序有点类似同步的多线程,在原创 2021-07-20 10:29:49 · 173 阅读 · 0 评论 -
Lua 元表(Metatable)
在 Lua table 中我们可以访问对应的key来得到value值,但是却无法对两个 table 进行操作。因此 Lua 提供了元表(Metatable),允许我们改变table的行为,每个行为关联了对应的元方法。例如,使用元表我们可以定义Lua如何计算两个table的相加操作a+b。当Lua试图对两个表进行相加时,先检查两者之一是否有元表,之后检查是否有一个叫"__add"的字段,若找到,则调用对应的值。"__add"等即时字段,其对应的值(往往是一个函数或是table)就是"元方法"。原创 2021-07-20 10:29:11 · 226 阅读 · 0 评论 -
Lua 模块与包
模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。以下为创建自定义模块 module.lua,文件代码格式如下:-- 文件名为 module.lua-- 定义一个名为 module 的模原创 2021-07-20 10:28:28 · 109 阅读 · 0 评论 -
Lua table(表)
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。Lua table 是不固定大小的,你可以根据自己需要进行扩容。Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。 例如string.format表示使用"format"来索引table string。table(表)的构造构造器是创建和初始化表的表达式。表是原创 2021-07-20 10:27:49 · 146 阅读 · 0 评论 -
Lua 迭代器
迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。在 Lua 中迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。泛型 for 迭代器泛型 for 在自己内部保存迭代函数,实际上它保存三个值:迭代函数、状态常量、控制变量。泛型 for 迭代器提供了集合的 key/value 对,语法格式如下:for k, v in pairs(t) do print(k, v)end上面代码中,k, v为原创 2021-07-20 10:27:13 · 229 阅读 · 0 评论 -
Lua 数组
数组,就是相同数据类型的元素按一定顺序排列的集合,可以是一维数组和多维数组。Lua 数组的索引键值可以使用整数表示,数组的大小不是固定的。一维数组一维数组是最简单的数组,其逻辑结构是线性表。一维数组可以用for循环出数组中的元素,如下实例:实例array={"Lua","Tutorial"}fori=0,2do print(array[i])end以上代码执行输出结果为:nilLuaTutorial正如你所看到的,我们可以使用整数索引来访问数...原创 2021-07-20 10:26:35 · 98 阅读 · 0 评论 -
Lua 字符串
字符串或串(String)是由数字、字母、下划线组成的一串字符。Lua 语言中字符串可以使用以下三种方式来表示:单引号间的一串字符。 双引号间的一串字符。 [[与]]间的一串字符。以上三种方式的字符串实例如下:实例string1="Lua"print("\"字符串 1 是\"",string1)string2='runoob.com'print("字符串 2 是",string2)string3=[["Lua 教程"]]print("字符串 3 是",str...原创 2021-07-19 20:37:53 · 797 阅读 · 0 评论 -
Lua 运算符
运算符是一个特殊的符号,用于告诉解释器执行特定的数学或逻辑运算。Lua提供了以下几种运算符类型:算术运算符 关系运算符 逻辑运算符 其他运算符算术运算符下表列出了 Lua 语言中的常用算术运算符,设定 A 的值为10,B 的值为 20:操作符 描述 实例 + 加法 A + B 输出结果 30 - 减法 A - B 输出结果 -10 * 乘法 A * B 输出结果 200 / 除法 B / A 输出结果 2 %原创 2021-07-19 20:37:03 · 168 阅读 · 0 评论 -
Lua 函数
在Lua中,函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以用来计算一些值。Lua 提供了许多的内建函数,你可以很方便的在程序中调用它们,如print()函数可以将传入的参数打印在控制台上。Lua 函数主要有两种用途:1.完成指定的任务,这种情况下函数作为调用语句使用; 2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。函数定义Lua 编程语言函数定义格式如下:optional_function_scope function function_n原创 2021-07-19 20:36:23 · 239 阅读 · 0 评论 -
Lua 流程控制
Lua 编程语言流程控制语句通过程序设定一个或多个条件语句来设定。在条件为 true 时执行指定程序代码,在条件为 false 时执行其他指定代码。以下是典型的流程控制流程图:控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,true和非nil为真。要注意的是Lua中 0 为 true:实例--[ 0 为 true ]if(0)then print("0 为 true")end以上代码输出结果为:0 为 trueLua 提供了以下控制...原创 2021-07-19 20:35:36 · 132 阅读 · 0 评论 -
Lua 循环
很多情况下我们需要做一些有规律性的重复操作,因此在程序中就需要重复执行某些语句。一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。循环语句是由循环体及循环的终止条件两部分组成的。Lua 语言提供了以下几种循环处理方式:循环类型 描述 while 循环 在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true。 for 循环 重复执原创 2021-07-19 20:35:00 · 209 阅读 · 0 评论 -
Lua 变量
变量在使用前,需要在代码中进行声明,即创建该变量。编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值。Lua 变量有三种类型:全局变量、局部变量、表中的域。Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。局部变量的作用域为从声明位置开始到所在语句块结束。变量的默认值均为 nil。实例-- test.lua 文件脚本a=5 -- 全局变量localb=5 ...原创 2021-07-19 20:34:16 · 107 阅读 · 0 评论 -
Lua 数据类型
Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。数据类型 描述 nil 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。 boolean 包含两个值:false和true。 number 表示双精度类型的实浮点数 s原创 2021-07-19 20:33:41 · 424 阅读 · 0 评论 -
Lua 基本语法(创建第一个 Lua 程序!)
第一个 Lua 程序交互式编程Lua 提供了交互式编程模式。我们可以在命令行中输入程序并立即查看效果。Lua 交互式编程模式可以通过命令 lua -i 或 lua 来启用:$ lua -i $ Lua 5.3.0 Copyright (C) 1994-2015 Lua.org, PUC-Rio> 在命令行中,输入以下命令:> print("Hello World!")接着我们按下回车键,输出结果如下:>print("Hello World!").原创 2021-07-19 20:32:51 · 325 阅读 · 0 评论 -
Lua 环境安装
Linux 系统上安装Linux & Mac上安装 Lua 安装非常简单,只需要下载源码包并在终端解压编译即可,本文使用了5.3.0版本进行安装:curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gztar zxf lua-5.3.0.tar.gzcd lua-5.3.0make linux testmake installMac OS X 系统上安装curl -R -O http://www.lua.org/ftp/lu原创 2021-07-19 20:31:59 · 401 阅读 · 0 评论 -
【Cocos2dx 3.3 Lua】剪裁结点ClippingNode
【ClippingNode】1、原理ClippingNode(裁剪节点)可以用来对节点进行裁剪。ClippingNode是Node的子类,可以像普通节点一样放入Layer,Scene,Node中。 主要是根据一个模板(Stencil)切割图片的节点,生成任何形状的节点显示。ClippingNode是利用模板遮罩来完成对Node区域裁剪的技术。如何理解ClippingNode的遮罩?看下图的例子吧。2、举例说明>模板(Sten...原创 2021-04-22 18:18:14 · 750 阅读 · 0 评论 -
【分享】C#中执行lua代码,以及将c#注册进lua的全局方法
之前需要引用luainterface.dll,luanet.dll。c#注册进lua的全局方法[C#]纯文本查看复制代码static void Main(string[] args) { Lua lua = new Lua(); Program obj = new Program();//把一个类中的普通方法注册进去 lua.RegisterFunction("NormalMethod", ...原创 2020-09-27 10:09:30 · 390 阅读 · 0 评论 -
图片资源加密,Lua文件加密详解
图片资源加密,Lua文件加密游戏开发中常遇到资源保护的问题。目前游戏开发中常加密的文件类型有:图片,Lua文件,音频等文件,而其实加密也是一把双刃剑。需要安全那就得耗费一定的资源去实现它。目前网上也有用TexturePacker工具来加密的,不过针对性还是不够强。分析一下原理为:1. 转格式:将需要加密的文件转为流的方式;2. 加密:根据自己需要使用加密手段,MD5,AES,甚至可以直接改变位移,加一些自己的特殊字符也可以使文件简单加密,加密完后基本保证图片类型基本用特殊软件预览不了也打原创 2020-09-17 10:20:38 · 1269 阅读 · 0 评论 -
Cocos2d-x Lua注册回调到C++
监听_movementHandler = handler; //缓存lua函数的引用 这个后边说auto dispatcher = getCCEventDispatcher();auto f = [this](cocos2d::EventCustom *event) //注册c代码形式的回调 这里用function做{auto eventData = (dragonBones::EventData*)(event->getUserData());auto typ...原创 2020-09-16 10:13:02 · 218 阅读 · 0 评论 -
lua 8小时时差
公司的棋牌游戏菜单打算采用lua来从mysql数据库中取出,根据各种蛋疼的规则,然后生成json返回给客户端,这样客户端只要解析json生成菜单树即可,排序,节点属性,显示等等一切逻辑都被记录在json字符串中,由于数据库中记录的菜单数据比较原始,所以lua承担了比较繁重的逻辑和重新组合节点的任务,捎带还要有缓存支持。首先说明下为什么会选择lua去生成这个json字符串,最主要的原因当然是性能问题,luajit可以算是最快的脚本语言了,同时配合nginx的高效,我们可以无状态的横向部署多台nginx作.原创 2020-09-14 10:31:58 · 563 阅读 · 0 评论 -
cocos2d-x 3.x lua的api与C++的关系
1、Lua中如何使用Cocos2d-x引擎中的类?在C++中是这样调用的://Sprite* sprite = Sprite::create();sprite->setPosition(Vec2(100, 100));this->addChild(sprite);//而在Lua中是这样调用的://local sprite = cc.Sprite:create()sprite:setPosition(cc.p(100, 100))self:addC...原创 2020-09-11 10:18:55 · 354 阅读 · 0 评论 -
Lua调用自定义C++类
以下介绍的是在 Windows7 + VS2013 + Cocos Code IDE。并使用Cocos Code IDE创建的Lua项目,绑定方法。1、将自定义的C++代码放在frameworks\runtime-src\Classes下当然放哪里是随意的,我喜欢放在Classes下。2、添加自定义类的.ini文件在 frameworks\cocos2d-x\tools\tolua 中,复制一份该文件夹下cocos2dx.ini的配置信息,然后修改一些参数,改成我们自定义类的参数。原创 2020-09-10 10:26:07 · 469 阅读 · 0 评论 -
Cocos2d-x开发中C++内存管理详解
由于开始并没有介绍C++语言,C++的内存管理当然也没进行任何的说明,为了掌握Cocos2d-x中的内存管理机制,是有必要先了解一些C++内存管理的知识。C++内存管理非常复杂,如果完全地系统地介绍可能需要一本书的篇幅才能解释清楚。这里只给大家介绍C++内存管理最为基本的用法。内存分配区域创建对象需要两个步骤:第一步,为对象分配内存,第二步,调用构造函数初始化内存。在第一步中对象分配内存时候,我们可以选择几个不同的分配区域,这几个区域如下:栈区域分配。栈内存分配运算内置于处理器的指令集中,效原创 2020-09-10 10:24:47 · 216 阅读 · 0 评论 -
Lua,让人惊叹的艺术!
chrisxie的专栏2008-09-30 12:09Lua 对于国人来说可能还比较陌生,然而随着它在电子娱乐、网络娱乐界得到大量的应用,许多人也开始关注起它来。Lua 虽然是一门脚本语言,但麻雀虽小,五脏却俱全。Lua 主要是面向过程的语言,与大多数脚本语言无异;但 Lua 围绕“栈”的语言构造,强大的表格基本类型,不仅让它身手敏捷(所有优秀脚本语言中速度最快的),而且拥有了百变金身(语法优美,灵活多变),如果说一些语言标榜的诸多特性,例如面向对象,对于 Lua 来说,居然只要用点“语法糖”就原创 2020-09-10 10:23:43 · 429 阅读 · 1 评论 -
Lua游戏脚本热更新机制分享
设计要点?能够在服务器运行期间更新程序逻辑代码以实现修正程序Bug、修改游戏数据的目的。游戏框架代码的热更新暂不考虑。例如:某个业务处理函数逻辑有Bug,服务器运营期间发现,在不停机情况下及时更新代码修复。技能数值表策划填写出现手误错误,导致玩家战斗异常,在不停机情况下及时更新内存中的数值表。更新代码时要保护非代码数据,尽量不用重新载入存盘数据。例如:登陆用户列表保存在内存中,用户登录模块出现bug需要跟新代码,此段代码更新后,用户列表依然有效,在线用户不受影响。常见方案?lua原创 2020-09-10 10:23:05 · 925 阅读 · 0 评论 -
lua内存管理
本篇文章,主要探讨一下lua中的内存管理(涉及到的文件 lmem.c,lauxlib.c )。lua内存管理:众所周知,lua是用纯c写的,所以lua中的内存管理,也就是用c方式对内存的管理。/*** About the realloc function:** void * frealloc (void *ud, void *ptr, size_t osize, size_t nsize);** (`osize’ is the old size, `nsize’ is the new原创 2020-09-10 10:22:32 · 1146 阅读 · 0 评论 -
学习Cocos2d-x Lua:从C++过渡到Lua
这个系列我们主要学习Cocos2d-x Lua,总结Lua开发过程中所涉及的知识点,以及在开发过程中如何使用Cocos Code IDE。1、Lua中如何使用Cocos2d-x引擎中的类?在C++中是这样调用的://Sprite*sprite=Sprite::create();sprite->setPosition(Vec2(100,100));this->addChild(sprite);//而在Lua中是这样调用的://localsprite...原创 2020-09-08 10:18:13 · 557 阅读 · 0 评论 -
学习Cocos2d-x Lua:绑定自定义类到Runtime(Lua-binding)
这个系列我们主要学习Cocos2d-x Lua,总结Lua开发过程中所涉及的知识点,以及在开发过程中如何使用Cocos Code IDE。这一篇讲解绑定自定义类到Runtime。 现在我们的需求是:在C++层定义了一些类,我们需要将这些类导出给Lua来使用,从而完成在C++层实现起来容易的需要,这个时候就需要将整个类作为模块导出。而Cocos2d-x正是采用的这种思想,将Cocos中的类导出供用户使用,而不是再写一套Lua代码,用户使用Cocos导出的这套接口,在Lua脚本层写游戏代码。...原创 2020-09-07 10:23:24 · 317 阅读 · 0 评论 -
Lua 中的协程分享
Lua里的协程是一个原来没见过的东西,Python的Gevent也是一个基于coroutine的python网络开发框架。性能据说很不错。协程和一般多线程的区别是,一般多线程由系统决定该哪个线程执行,是抢占式的,而协程是由每个线程自己决定自己什么时候不执行,并把执行权主动交给下一个线程。协程是用户空间线程,操作系统其存在一无所知,所以需要用户自己去做调度,用来执行协作式多任务非常合适。线程和协同程序的主要不同在于:在多处理器情况下,多线程程序同时运行多个线程;而协同程序是通过协作来完成,在任一指定时原创 2020-09-04 10:05:08 · 333 阅读 · 0 评论 -
Lua函数闭包分享
lua语言中闭包lua语言有如下两个特点:1.lua中的函数可以被存放在变量、表中,也可以作为函数的参数,还可以作为函数的返回值,如:func = function()print(“Hello”);end等价于function func()print(“Hello”);end这两种写法都是函数func()的定义;并且下面这个例子:function func()return function() print(“Hello”); end –函数作为返回值原创 2020-09-04 09:59:35 · 402 阅读 · 1 评论 -
解说Lua中的面向对象
面向对象不是针对某一门语言,而是一种思想,在面向过程的语言也可以使用面向对象的思想来进行编程。在Lua中,并没有面向对象的概念存在,没有类的定义和子类的定义,但同样在Lua中可以利用面向对象的思想来实现面向对象的类继承。一、复制表的方式面向对象–Lua中的面向对象–[[复制表方式面向对象参数为一张表,通过遍历这张表取值,赋给一张空表,最后返回新建的表,来达到克隆表]]function clone(tab)local ins = {}for key, var in pair原创 2020-09-03 10:04:36 · 470 阅读 · 0 评论 -
Cocos2d-x通过Jni实现Cocos2d-x界面跳转到新的Activity
cocos2d-x通过jni实现Cocos2d-x界面跳转到新的Activity1、Java层1)首先在org.cocos2dx.cpp目录下添加新类UserInfoActivity.java,该类自行定义即可,代码如下:packageorg.cocos2dx.cpp;importcom.pactera.jni.R;//注意路径importandroid.app.Activity;importandroid.os.Bundle;importandroid.wid...原创 2020-09-02 10:10:27 · 640 阅读 · 0 评论 -
cocos2d-x 3.x lua的api与C++的关系
cocos2d-x 3.x lua的api与C++的关系1、Lua中如何使用Cocos2d-x引擎中的类?在C++中是这样调用的://Sprite*sprite=Sprite::create();sprite->setPosition(Vec2(100,100));this->addChild(sprite);//而在Lua中是这样调用的://localsprite=cc.Sprite:create()sprite:setPosition(cc.p(...原创 2020-09-02 10:09:11 · 442 阅读 · 0 评论 -
Lua深复制,浅复制实现
table.copy = function(t)local u = { }for k, v in pairs(t) do u[k] = v endreturn setmetatable(u, getmetatable(t))endtable.deepCopy = function(t)local function _deepCopy(from ,to)for k, v in pairs(from) doif type(v) ~= “table” thento[k] = v原创 2020-09-02 10:07:04 · 363 阅读 · 0 评论 -
Lua C++ 交互
appdelegate.cpp 中要调用 register_game_moudle 函数lua 调用 C++ 函数int register_game_moudle(lua_State* L){lua_getglobal(L, "_G");if (lua_istable(L,-1))//stack:...,_G,{CCLOG("register_game_moudle");tolua_open(L);tolua_module(L,"luagame",0);tolua_b原创 2020-08-13 14:23:24 · 177 阅读 · 0 评论 -
Cocos2d-x初入学堂(7)-->win32显示中文乱码解决方法
vs默认源文件的字符集是多字节字符集,既本地化语言字符集,如果你用的系统是中文系统,简体中文,默认字符集是GBK,源码是不包含非ASCLL码。要让其在win32上正常显示,就需要将其转成UTF-8。下面就和大家讲解解决这个问题方法。解决方法一:函数转换编码由于为了以后开发方便,我一个单独的类将其写成了....Tools.h #ifndef _TOOLS_H_ #define _TOOLS_H_ #include "cocos2d.h" ...原创 2020-07-30 10:18:46 · 306 阅读 · 0 评论 -
Lua C++ 交互
appdelegate.cpp 中要调用 register_game_moudle 函数lua 调用 C++ 函数int register_game_moudle(lua_State* L){lua_getglobal(L, "_G");if (lua_istable(L,-1))//stack:...,_G,{CCLOG("register_game_moudle");tolua_open(L);tolua_module(L,"luagame",0);tolua_b原创 2020-07-29 10:14:18 · 156 阅读 · 0 评论