LUA - 技术教程文章

照着例子学习 protobuf-lua【代码】【图】

参考文章:cocos2dx使用lua和protobuf首先得下载protobuf-gen-lua的插件,插件Git地址在此。下载完之后进入到protoc-gen-lua\plugin这个目录,并在其中建立一个批处理文件:@python E:\3rd\quick-x-protobuf\proto-gen-lua\protoc-gen-lua\plugin\protoc-gen-lua 然后进入到上一篇笔记中的addressbook.proto所在的文件夹内,运行如下命令:protoc --lua_out=生成的lua存放地址 --plugin=protoc-gen-lua=上面新建的bat的完整地址 ad...

关于cocos2dx手游lua文件加密的解决方式

非常多使用cocos2dx+lua做游戏的同学。都会想到一个问题,我的游戏一旦公布,如何才干保证的我脚本代码不被破解。不泄露代码。尽管这和开源、共享的原则不合。可是代码也是coder的劳动成果,理应得到保护。特别是商业游戏更是如此,不希望被别人破解掉源代码而且进行改动。 今天的话题就是怎样实现lua脚本文件的加密和解密。 我在网络上查过,都没有成熟的解决方式。然后我经过考虑之后,总结出两种解决方式,供大家參考...

Step By Step(Lua字符串库) (转)【代码】【图】

1. 基础字符串函数: 字符串库中有一些函数非常简单,如: 1). string.len(s) 返回字符串s的长度; 2). string.rep(s,n) 返回字符串s重复n次的结果; 3). string.lower(s) 返回s的副本,其中所有的大写都被转换为了小写形式,其他字符不变; 4). string.upper(s) 和lower相反,将小写转换为大写; 5). string.sub(s,i,j) 提取字符串s的第i个到第j个字符。Lua中,第一个字符的索引值为1,最后一个为-1,以此类推,...

python执行lua代码【代码】

楔子下面我们来看看如何使用python来执行lua代码。如果了解lua的话,可能会感到器官,我们之前调用C、调用go,都是调用其编写的动态库。可lua是脚本语言啊,难道也可以写动态库吗?其实我们不是调用动态库,而是直接执行lua代码。这时候可能又有人猜到了,python执行lua代码,本质上应该还是通过lua解释器来调用吧。答案不是的,因为python的执行lua代码的包自带了一个lua解释器,并且是以pyd的形式。因为lua解释器非常的精简,自带...

cocos2dx -lua 面向对象-转

转自:http://www.himigame.com/lua-game/1282.html上一篇中,向童鞋们介绍了如何自定义类binding到Lua中供给使用的教程,那么本篇将介绍利用OOP思想在在Lua中进行创建一个自定义类。 首先Himi来向大家讲解如何在Lua中不binding来自定义lua类,其实这种方式在Cocos2dx的Lua Samples已经为我们做好了例子,就看童鞋们是否认真阅读了。此示例路径在你解压cocos2dx引擎包下的cocos2d-2.1rc0-x-2.1.2/samples/Lua/TestLua 中的 Touc...

Lua中的数据结构【代码】

1 数组:(lua习惯数组从1开始)a={} for i=1,1000doa[i]=0 end2 阵和多维数组1: mt={}//新建一个表,表元素为表for i=1,N domt[i]={}//新建一个表,里面的表元素为值for j=1,M domt[i][j]=1end end 2: mt={}//新建一个表,表元素为值(注意起始地址是1*M+1,不再是1开始了)for i=1,N dofor j=1,M domt[i*M+j]=0end end!:注意在表中没有被赋值的部分都是nil无效值,相当于不存在3 链表:每个结点代表一个table,每个table两个域:...

nginx中lua脚本输出

在nginx中嵌入lua模块,能够使得nginx服务端的开发大大地方便,尤其是在实现一些额外的统计等小功能的时候。在nginx模块中直接lua嵌入脚本文件,可以直接使用nginx中lua模块的一些函数直接返回数据。可以调用的函数如下:ngx.say(),ngx.print(),return ,ngx.exit()等等,下面介绍一下这些函数的区别:(1)ngx.say()函数是返回该函数的参数加换行的数据,例如ngx.say("hello"),则返回数据hello/r/n,(2)ngx.print()是直接返回函数...

Redis 的Lua Script脚本功能

从 Redis 2.6.0 版本开始,通过内置的 Lua 解释器,可以使用 EVAL 命令对 Lua 脚本进行求值Redis2.6内置的Lua Script支持,可以在Redis的Server端一次过运行大量逻辑。? 整个Script默认是在一个事务里的。 ? Script里涉及的所有Key尽量用变量,从外面传入,使Redis一开始就知道你要改变哪些key。 ? EVAL每次传输一整段Script比较费带宽,可以先用SCRIPT LOAD载入script,返回哈希值。然后用EVALHASH执行。 ? 内置的LUA库里还很贴...

Xlua侧如何接受CSharp侧的可变参数【代码】【图】

CSharp侧的代码: 1using UnityEngine;2 3namespace LGSTEST4{5publicclass Lgs : MonoBehaviour6 {7void Update()8 {9if (Input.GetMouseButtonDown(0)) 10 { 11 TestParams(12, "110"); 12 } 13 } 1415void TestParams(paramsobject[] param) 16 { 17 Debug.Log(param[0]); 18 } 19 } 20 }用Xlua对方法 TestParams 进行修复的时候,lua代码...

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:addChild(sprite)//是不是很简单?差别其实不是很大嘛!Lua中使用引擎中的类,只要在前面多加个 cc. 即可。而调用类的函数,不是双冒号(::) ,而是一个冒号(...

cocos2dx使用tolua关于字符串处理的一个问题

正在使用cocos2dx的tolua binding在此过程中发现的一个问题。假设一回或输入是std::string当我们不同意包括二进制数据,和std::string我同意,这样一来就导致了不正确的使用等。这可能会导致一系列的问题,特别是,我们需要使用std::string议信息的时候。造成问题的解决办法是tolua生成的代码对于std::string都没有添加length參数,这样就造成了一旦是二进制数据而且遇到\0就会被截断。改动的办法事实上也非常easy,仅仅须要改动一...

cocos2dx-lua 简单的字体变色拼接实现【代码】

这里主要做的是游戏公告里面用到的,因此我加入了简单的html <font>标签解析,是为了给运营小白预览,但其中的size 属性没有,因为后来没有这个需求了,所以也就懒得改了。  实现思路很简单:设置好行宽和行高,然后一个一个字往上面添加,直到达到行宽上限或者换行符,就换行,再循环。--简易html label --[[暂只对以下标签进行实现<font> 标签进行实现,可添加 size 和 color属性<br> 换行 --]]--[=[demo:html = "<font size=\...

interpolator, typeEvaluator 以及属性动画的参数

先下我的结论。它们都是对动画的控制。interpolator 插值器:时间和进度(百分比)的关系函数typeEvaluator 估值器:进度(百分比)和具体进度数据的关系函数属性动画的参数:指定了属性的初始值和结束值。由于默认有interpolator 和 系数为1的线性typeEvaluator。所以我们才会看到一般的动画是开始和结束慢,中间匀速。想象一下,如果我们把参数设置的足够多。比如一个5秒动画,设置了120个进度数据。相当于1秒24个进度数据,人眼是看...

2 Lua变量、运算符及控制结构

1、Lua语言定义标识符不能以数字作为起始符,也要避免下划线(_)接大写字母,因为这是Lua自身保留的,如_Start。 常量:全大写和下划线,如MY_CONSTANT 变量:第一个字母小写,如myValue 全局变量:第一个字母用小写g表示,如gMyGlobal 函数名:第一个字母大写,如function MyFunction()Lua中,两个减号--表示该行为注释,整段注释则用 --[[...--]] 2、变量在Lua中,变量默认是全局的,不需要在使用前声明,可以在任何地...

《Programming in Lua 3》读书笔记(二十八)

日期:2014.8.15PartⅣ The C API 32 Memory Management Lua是动态的对其数据结构进行管理的。所有数据结构按需求进行增长,最终进行释放。Lua对其内存的使用控制较为严格,当我们关闭了一个Lua state的时候,Lua会立即释放其内存占用。不仅如此,Lua中的所有对象都被垃圾回收器管理,包括tables,strings,和functions,threads,和modules。 Lua进行内存管理的方式对多数程序来说都是挺合适的。但是还是有一些特殊的程序...

lua中table的遍历,以及删除【代码】

Lua 内table遍历在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是:1. ipairsfor index, value in ipairs(table) doend注:这种方式的遍历只会从key为1的地方开始,一直以key递增1的顺序来遍历,若找到一个递增不是1的key就结束遍历,无论后面是否仍然是顺序的key。 1--Sample_1: 2local tab1 = 3{4 [1] = 1,5 [2] = 2,6 [3] = 3,7 [4] = 4,8}9for key, value inipairs(tab1) do10pr...

lua.5.2.3源码阅读(03):通用变量【代码】

lua的堆栈中存放的是通用变量,通用变量实际上就是一个union内存块,根据不同的类型,采用不同的组织方式,看一下通用类型的相关定义,截取了lobject.h相关代码,从代码上看,不太清楚numfield为什么会有两个相关定义。堆栈中可以根据情况分为一下几种类型:1、双精度浮点数:double d__;2、复合类型,通过tt__来表示类型;3、复合类型中分为两种:可回收类型和不可回收类型;4、可回收类型可以是:TString、Udata、Closure、Table...

Evaluate Reverse Polish Notation【代码】【图】

Evaluate the value of an arithmetic expression in Reverse Polish Notation.Valid operators are +, -, *, /. Each operand may be an integer or another expression.Some examples: ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6The concept is:When meeting the number, push into the stack.When meeting the operator, pop the top 2 number and compute the val...

399. Evaluate Division【代码】

问题描述:Equations are given in the format A / B = k, where Aand B are variables represented as strings, and k is a real number (floating point number). Given some queries, return the answers. If the answer does not exist, return -1.0.Example:Given a / b = 2.0, b / c = 3.0. queries are: a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ? . return [6.0, 0.5, -1.0, 1.0, -1.0 ].The input is: vecto...

lua中ipairs与pairs区别与注意

lua中基础类 lbaselib.c 这里面定义的基础函数,函数指针数组;static const luaL_Reg base_funcs[] = {{"assert", luaB_assert},{"collectgarbage", luaB_collectgarbage},{"dofile", luaB_dofile},{"error", luaB_error},{"getmetatable", luaB_getmetatable},{"ipairs", luaB_ipairs},{"loadfile", luaB_loadfile},{"load", luaB_load}, #if defined(LUA_COMPAT_LOADSTRING){"loadstring", luaB_load}, #endif{"next", luaB_ne...

lua 的 WriteFile 和 ReadFile【代码】

lua 的 ReadFile 和 WriteFile注意: lua 代码中的 string 可以包含二进制数据 string.len(str) 不会被 ‘\0‘ 截断 从 lua 传入 c 时: 需要传入包含二进制数据的 string 和数据的 size, size 用 string.len(str) 来计算 从 c 传入 lua 时: 应该使用 lua_pushlstring 而不是 lua_pushstring, lua_pushstring 内部使用 strlen() 来计算数据的长度,而 lua_pushlstring 需要传入一个 sizeint LuaFileSystem::ReadFile( lua_State* ...

编写一个简单的C++供Lua调用的计时器【代码】【图】

//-----------------------------------------Timer------------------------------------ #include "stdafx.h" #include "windows.h" #include <iostream> #include <fstream> #include <string> usingnamespace std;extern"C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" } #pragma comment(lib,"lualib.lib")lua_State * L; int times =0; LUALIB_API int stoptimers(lua_State *L) //停止Timer{i...

FFLIB之FFLUA——C++嵌入Lua&扩展Lua利器[转]【代码】

摘要:在使用C++做服务器开发中,经常会使用到脚本技术,Lua是最优秀的嵌入式脚本之一。Lua的轻量、小巧、概念之简单,都使他变得越来越受欢迎。本人也使用过python做嵌入式脚本,二者各有特点,关于python之后会写相关的文章,python对于我而言更喜欢用来编写工具,我前边一些相关的算法也是用python来实现的。今天主要讲Lua相关的开发技术。Lua具有如下特点:Lua 拥有虚拟机的概念,而其全部用标准C实现,不依赖任何库即可编译安装...

Lua 打印Table【代码】

function dump(value, desciption, nesting)if type(nesting) ~= "number" then nesting = 3 endlocal lookupTable = {}local result = {}local function _v(v)if type(v) == "string" thenv = "\"" .. v .. "\""endreturn tostring(v)endlocal function _dump(value, desciption, indent, nest, keylen)desciption = desciption or "<var>"local spc = ""if type(keylen) == "number" thenspc = string.rep(" ", keylen - string....

mac 下安装 lua环境【代码】

1,安装命令首先从mac AppStore 上面安装brew。brew只能当前用户使用。$ brew install lua --with-completion==> Downloading http://www.lua.org/ftp/lua-5.2.3.tar.gz ######################################################################## 100.0% ==> Downloading http://luajit.org/patches/lua-5.2.0-advanced_readline.patch ######################################################################## 100.0% ==> Do...

bilingual evaluation understudy

BLEU is designed to approximate human judgement at a corpus level, and performs badly if used to evaluate the quality of individual sentences. https://en.wikipedia.org/wiki/BLEUTo produce a score for the whole corpus the modified precision scores for the segments are combined using the geometric meanmultiplied by a brevity penalty to prevent very short candidates from receiving too high a score.原...

lua中的require机制

lua中的require机制 为了方便代码管理,通常会把lua代码分成不同的模块,然后在通过require函数把它们加载进来。现在看看lua的require的处理流程。1、require机制相关的数据和函数 package.path:保存加载外部模块(lua中"模块"和"文件"这两个概念的分界比较含糊,因为这个值在不同的时刻会扮演不同的角色)的搜索 路径,这种路径是"模板式的路径",它里面会包含可替代符号"?",这个符号会被替换,然后lua查找这个文件是否存在,...

uLua异常处理【图】

Unity热更新常采用uLua框架,这里首先分析uLua异常处理,在LuaState类里存在DoFile函数,当使用DoFile调用lua程序时如果发现有语法错误时,将在Unity控制台打印出错误,接下来分析如何实现其异常功能,首先分析uLua源代码650) this.width=650;" src="/upload/getfiles/default/2022/11/4/20221104062304236.jpg" title="QQ图片20170724114231.png" />luaL_loadbuffer() 函数将编译lua文件中的lua代码,如果没有错误,则返回0,同时将...

Lua基本类型和基本运算【代码】【图】

print(a) a=10 a=nil print(a) print(type(false)) print(type(nil)) print(type({})) print(type(12)) print(type("hello")); print(type(type)); print(type) a=type --变量可以是函数,a应该只是一个指针,void * print(a(type))--[[ type函数:可以判断出变量的类型。1.nil 类型,类似java里面的null,一个全局变量没有赋值的时候,默认是nil 2.booleans 类型,取值为:true ,false.但是在控制语句中,所有值都可以是布尔值,除...

C++混合编程之idlcpp教程Lua篇(2)【代码】【图】

在上一篇 C++混合编程之idlcpp教程(一) 中介绍了 idlcpp 工具的使用。现在对 idlcpp 所带的示例教程进行讲解,这里针对的 Lua 语言的例子。首先看第一个示例程序 LuaTutorial0。像很多语言的第一个例子一样,是一个打印 Hello world 的程序。用Visual Studio 2015打开解决方案文件 tutorials\LuaTutorials\LuaTutorials.sln,其下已经有多个工程文件。 在工程LuaTutorial0中,已经加入了三个文件,分别是 LuaTutorial0.cpp, Tutor...