cocos2dx lua注册事件详解
最近在学习cocos2dx lua的时候,遇到了一些关于事件注册的逻辑!
结合用户实际操作和游戏的真实需求,关于事件在游戏中还是使用非常多的,所以特此记录一下
事件(源自网络)
事件是可以被控件识别的操作。如按下确定按钮,选择某个单选按钮或者复选框。每一种控件有自己可以识别的事件,如窗体的加载、单击、双击等事件,编辑框(文本框)的文本改变事件,等等。
事件是用户对窗口上各种组件的操作。
事件有系统事件和用户事件。
1.系统事件由系统激发,如时间间隔24小时,银行储蓄的存款日期增加一天。
2.用户事件由用户激发,如用户点击按钮,在文本框中显示特定的文本。事件驱动控件执行某项功能。
触发事件的对象称为事件发送者;接收事件的对象称为事件接受者;
注: 这里只针对用户事件!
cocos2dx中事件的类型
registerScriptTouchHandler 注册触屏事件
registerScriptTapHandler 注册点击事件
registerScriptHandler ...
Unity Excel导表工具,导成Lua,支持嵌套结构 木之子南
为什么要使用导表工具?
几乎所有游戏公司数据由策划来配置,程序负责逻辑,策划看不懂代码,excel是可以相对具象的让策划了解一个模块的数据配置,起到了策划和程序之间的桥梁作用,也可以方便策划对数据的把控。
根据各个公司各个项目的不同,导表工具的输出形式不同,输出形式有:json,sqlite,txt,lua等,根据不同的项目需求,可以选不同的导表工具。本文章主要是介绍Excel导出Lua文件。
此工具的功能
支持导出Lua文件,自动换行对齐
支持自定义字段不导入Lua
支持无限嵌套的树状结构(table套table)
支持的Excel格式 .xlsx, .xlsm, .xltx, .xltm
导出路径如果已存在同名的Lua文件,则会覆盖
Excel和导出文件的效果
excel的格式
导出的lua格式
return {
[1] = {
id = 1,
name = {
CN = "安娜",
EN = "Anna", ...
Ansible Role 系统环境 之【lua】
Ansible Role: lua
介绍
要求
测试环境
角色变量
依赖
github地址
Example Playbook
添加lua语言环境
介绍
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。
官网: http://www.lua.org/
官方文档: http://www.lua.org/docs.html
wike: http://lua-users.org/wiki/
编译好的lua:http://luabinaries.sourceforge.net/
...
随机取n个不相同的元素(Lua) 木之子南
随机取n个不相同的元素(Lua实现)
一些逻辑逻辑需求要在一个长度为m数组中取出n个不同的元素(m > n),一般第一想法是随机出一个下标,然后删除对应的元素,以此来取出不同的元素。本篇文章介绍一个不需要删除操作的方法。代码如下:
-- 假设长度m为10,随机取出个数为n=3
local table = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
local count = 3
local length = #table
for i = 1, count do
local ri = math.random(i, length)
local tmp = table[i]
table[i] = table[ri]
table[ri] = tmp
end
-- table中前3个元素就是要取出的三个元素
实现思路:第一次循环在1-m中随机一个下标ri,然后将下标1和ri交换,第二次循环在2-m中随机一个下标ri,将ri和2进行交换,最后table中前三个元素就是随机出来的元素。
leetcode150.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)) -> 6
计算后缀表达式。我们一般看到的数学表达式就是中缀表达式,也就是将符号放在两个数字之间。后缀表达式也就是将运算符放在相应数字的后面。后缀表达式相当于树中的后序遍历。
思路一:栈当我们遇到数字时就将数字压入栈中,如果遇到操作 ...
lua三种字符串拼接性能分析
说明lua中提供了3中字符串拼接函数,测试在日常使用情况下,各种拼接字符串的性能对比。
测试环境操作系统:Debian GNU/Linux 8CPU:Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz内存:64Glua环境:LuaJIT-2.1.0-beta3 (测试的时候关闭jit)
测试普通日常使用性能分析日常拼接字符串的时候一般都是多个已存在的变量,夹杂一些字符串常量进行拼接,例如:1package.cpath = pg.script_dir .. "/bot/lib/?.so;" .. id .. package.cpath
测试代码:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263if jit then jit.off()end-- 随机生成字符串备用local randomStringSzie = 200000local strTab ...
在Lua中使用gettext实现多语言支持
本文系转载,原文链接:http://zengrong.net/post/1986.htm感谢原作者无私分享。
在Lua中使用gettext实现多语言支持
2016-06-07更新:加入gettext包含的工具简介。
GNU gettext 是一套优秀的国际化工具。在 linux 中被大量采用。wordpress 也使用 gettext 实现多语言支持。
本文介绍如何在 quick-cocos2d-x 中使用 gettext 做多语言支持。同时介绍多语言翻译工具 poedit 对 Lua 语言的支持。
gettext 简介gettext 是一套工具集的名称。这套工具集包含 xgettext/msginit/msgfmt 等一套建立模版(POT)、创建PO文件和编译MO文件的工具。
gettext 包含的工具如下:
xgettext 从源码中生成POT模版或直接生成PO文件;
msginit 基于POT文件生成待翻译的PO文件;
msgfmt 将PO文件编译成二进制的MO文件;
msgunfmt 顾名思义,将MO文件反编译成PO文件;
msgmerge 将POT模版文件与PO文件合并。 ...
深入 Lua Garbage Collector(一)
看到一个 Bob Nystrom 写的 C 语言实现的 Garbage Collector
借着这个小程序顺便深入地了解一下Lua的垃圾回收机制
Garbage Collector算法小结这是之前做的一点小笔记:
C Garbage Collector首先还是先来看看这个 C 的基本的垃圾回收器
采用的算法用的是经典的 Mark & Sweep 算法
在上面的笔记里面已经介绍的很清楚了
该算法的工作原理几乎与我们对 可访问性(reachability) 的定义完全一样:
从根节点开始,依次遍历整个对象图。每当你访问到一个对象,在上面设置一个 标记(mark) 位,置为 true 。
一旦搞定,找出所有标记位为 not 的对象集,然后删除它们。
对象对要想清理垃圾,首先我们得制造点垃圾出来
所以假设我们正在为一种简单的语言编写一个解释器。它是动态的类型并且有两种类型的变量:int 和 pair 。 下面是用枚举来标示一个对象的类型:
123456789101112131415161718192021222324252627typedef enum { OBJ_I ...
lua通用数据类型
TValue结构TValue这个结构体是Lua的通用结构体,,Lua中的所有的数据都可以使用这个结构体来表示.很容易想到,在面向对象中,这个结构体是一个基类,派生出来的都是其他的子类.
TValue结构体内部有几个宏, 展开之后就是这样的:
typedef struct lua_TValue {
union {
union GCObject {
struct GCheader {
GCObject *next; lu_byte tt; lu_byte marked;
} gch;
union TString ts;
union Udata u;
union Closure cl;
struct Table h;
struct Proto p;
struct UpVal uv;
struct lua_State th; /* thread */
} gc;
void *p;
lua_Nu ...
cocos2dx lua 多线程之协成理解与实战
lua是不支持多线程的,一般都是协同来调用的。但是lua却可以调用c函数。于是,我们通过lua调用C接口起一个线程,实现lua多线程的使用。子线程再调用lua中的function。就可以通过子线程获取一些数据。单纯的人儿,以为一切都是美好的。
问题就出现C调用lua中的function, 将数据传给lua。
lua的运行首先我们需要知道,lua是解释性语言。是在执行的时候才分配堆栈空间。通过查看lua的源码,我们可以知道,在main函数的开端,lua就创建了一个全局的L(状态机),这个状态机可以说是lua的核心所在。它保存了栈的地址。
当执行lua脚本时,lua会将全局的变量和function记录在堆中,当执行代码段是,就会将一些局部变量和参数压到栈中进行处理。这一切和c语言的解析是一样的。
我们知道C也是可以调用lua的function的,一般的操作是:
在lua中调用C函数,将需要注册的function,作为参数传给C函数
C将获取到的function和L(状态机)进行保存。
C通过向L压栈,将function和一些参数压入。通过lua_call函数进行调用。
根 ...