Lua
振长策而御宇内
一只在编程海洋中遨游的小虾米
展开
-
C调Lua函数
C 调用 lua 函数需要考虑的问题: 1. 使用 lua_pcall 可以调用 lua 函数,首先把 lua 函数入栈,然后把参数入栈, lua_pcall(luaState, 参数个数, 返回值个数, 0) ; 2. 为了在事件触发时回调 lua 函数,需要把 lua 函数保存起来,使用 luaL_ref(luaState, LUA_REGISTRYINDEX) 将位于栈顶转载 2016-05-31 17:40:38 · 1435 阅读 · 0 评论 -
1000行代码写小游戏(三)
更新玩家的血量、攻击、防御等属性数值和展示:-- 更新血量function MineSecretDialog:updateUserHp(addHp, addMaxHp, isInit) addHp = addHp or 0 addMaxHp = addMaxHp or 0 isInit = isInit or false local updateHp = f原创 2016-03-28 16:25:47 · 1676 阅读 · 0 评论 -
1000行代码写小游戏(二)
玩家属性Table数据格式:local userData = { floor = 1, -- 楼层 level = 0, -- 等级 curExp = 0, -- 当前经验 maxExp = 0, -- 升级经验 money = 0, -- 金钱 ironKey = 0, -- 铁钥匙原创 2016-03-28 16:06:10 · 2991 阅读 · 0 评论 -
1000行代码写小游戏(一)
用lua写的小游戏,主要玩法是点击进行采矿并和怪物搏斗等操作,人物属性有体力,血量,恢复,攻击,防御采矿可以挖到金币和经验,打怪升级最后决战boss赢取胜利,升级可以获得技能点增加属性,还有老虎机系统等外围系统首先说下小怪和矿的配置格式和需要用到的参数读取函数:local sz = CCDirector:sharedDirector():getVisibleSize()l原创 2016-03-28 15:43:09 · 8797 阅读 · 0 评论 -
Lua标准库
S库/方法及用途1Error Handling包括错误处理功能,如断言,误差 - 错误处理。2Memory ManagementI包括与垃圾回收Lua中所解释的自动内存管理功能3dofile ([filename])它打开该文件并执行该文件作为一个块的内容。如果不带参数传递,那么这个函数执行标准输入的内容。转载 2016-03-28 14:49:56 · 648 阅读 · 0 评论 -
Lua获取object在全图中的位置
function GetObjectRectOnWorldSpace( object ) if object == nil then return nil end local obj = tolua.cast(object, "CCNode") if obj == nil then return nil end local x,y = obj:getPosition() if ty原创 2016-01-31 19:58:11 · 1442 阅读 · 0 评论 -
Lua消息处理集合
function PostNotification( msg, arg ) if arg then if type(arg) == "number" then arg = CCInteger:create(arg) end CCNotificationCenter:sharedNotificationCenter():postNotification( msg, arg );原创 2016-01-31 19:53:22 · 1028 阅读 · 0 评论 -
Lua检查非空
function CheckNil( obj, msg ) if obj == nil then if msg then print( msg ) end return nil end return trueend原创 2016-01-31 19:52:37 · 4563 阅读 · 0 评论 -
Lua增加ccbi
function AddCCBI( str ,parent, ptr, pos, tag , zorder) local loader = CCNodeLoaderLibrary:sharedCCNodeLoaderLibrary() local reader = CCBReader:new(loader) reader:autorelease() loc原创 2016-01-31 19:48:48 · 443 阅读 · 0 评论 -
1000行代码写小游戏(四)
更新金币、钥匙和收藏品:-- 更新金币function MineSecretDialog:updateUserMoney(addMoney, isInit) addMoney = addMoney or 0 isInit = isInit or false if addMoney ~= 0 or isInit then userData.money原创 2016-03-28 16:33:03 · 3593 阅读 · 0 评论 -
1000行代码写小游戏(五)
主角的一些属性更新和展示都已经做完了,下面主要做玩法方面的,添加小怪、矿和系统,并增加点击逻辑:-- 增加矿,敌人和系统function MineSecretDialog:addMineAndEnemy() local bonusList = getBonusListInfo() for i,v in ipairs(bonusList) do if v.typ原创 2016-03-28 16:41:13 · 1273 阅读 · 0 评论 -
Lua中WriteFile和ReadFile
lua 的 ReadFile 和 WriteFile注意:lua 代码中的 string 可以包含二进制数据 string.len(str) 不会被 '\0' 截断从 lua 传入 c 时: 需要传入包含二进制数据的 string 和数据的 size, size 用 string.len(str) 来计算从 c 传入 lua 时: 应该使用 lua_pushlstring原创 2016-05-31 17:31:01 · 3021 阅读 · 0 评论 -
Lua面向对象实现
元表概念Lua中,面向对向是用元表这种机制来实现的。元表是个很“道家”的机制,很深遂,很强大,里面有一些基本概念比较难理解透彻。不过,只有完全理解了元表,才能对Lua的面向对象使用自如,才能在写Lua代码的高级语法时游刃有余。首先,一般来说,一个表和它的元表是不同的个体(不属于同一个表),在创建新的table时,不会自动创建元表。但是,任何表都可以有元表(这种能力是存在的)。转载 2016-05-30 11:46:51 · 467 阅读 · 0 评论 -
Lua内存的监测和回收
Lua内存是自动收集的, 这点跟Java类似, 不被任何对象或全局变量引用的数据,将被首先标记为回收,不需要开发者做任何事情.但是,正如Java也会有内存泄露一样, Lua也会有, 只不过,跟C++的不同,它是由于代码执行所装载的资源,并没有被彻底销毁而导致,其中,最臭名昭著的就是不小心把局部变量声明成了全局变量(忘了加local修饰符)。 类似这样造成的内存泄露, 跟任何其他语言的内存泄露一样,转载 2016-05-30 11:41:23 · 486 阅读 · 0 评论 -
Lua内存泄露情况举例
1、在多次刷新的情况下不停的 新建table;如 Update()是一个不停被回调的函数,那么在Update里,function Update()local t = {};--创建表,内存泄露,游戏常见到end会产生很多消耗。2、长字符串,虽然Lua虚拟机不会显示这块内存,但任务管理器还是会产生巨大的消耗。如:local原创 2016-05-30 11:36:15 · 5426 阅读 · 2 评论 -
1000行代码写小游戏(终)
最后献上完整的1000行代码,基本功能已经完成,可以通过配置小怪和矿的位置和大小控制玩家时长和难度:---------------------------------------------------------------------------------------------- Added by ???---------------------------------------原创 2016-03-28 16:52:06 · 10579 阅读 · 1 评论 -
1000行代码写小游戏(八)
还附有主角根据恢复数据自动回血的功能,体力也是定时恢复的,根据定时器限制按钮点击频率最大值:function MineSecretDialog:onEnter() self.schedulerId = CCDirector:sharedDirector():getScheduler():scheduleScriptFunc(function() -- 恢复体力值原创 2016-03-28 16:49:39 · 1058 阅读 · 0 评论 -
1000行代码写小游戏(七)
初始化系统的状态和点击反馈,有数值系统和老虎机系统:-- 初始化系统的信息和状态function MineSecretDialog:initSystemStatus(v) local times = 0 local haveRunAction = false G_Font_Purple = { name = DefaultFont, size = 15, color原创 2016-03-28 16:46:23 · 738 阅读 · 0 评论 -
1000行代码写小游戏(六)
初始化敌人的状态和点击逻辑:-- 初始化敌人的信息和状态function MineSecretDialog:initEnemyStatus(v) local haveRunAction = false local itemSize = CCSizeMake(v.width, v.height) local enemyData = getEnemyLifeAndRec原创 2016-03-28 16:43:00 · 983 阅读 · 0 评论 -
Lua重新加载Lua文件
function CFModuleReload( moduleName) if UtilityHelper:getInnerTest() == 1 then CCFileUtils:sharedFileUtils():purgeCachedEntries() return testreload(moduleName) else r原创 2016-01-31 19:46:28 · 3374 阅读 · 0 评论 -
Lua封装格式化float
function float_format( value ) local real_value = value if value - 0.1 < math.floor(value) then real_value = string.format("%g", value) else real_value = string.format("%.1原创 2016-01-31 19:45:24 · 1038 阅读 · 0 评论 -
Lua封装格式化html
function html_encode( str ) if str then str = string.gsub(str, "<", "<") str = string.gsub(str, ">", ">") else str = "" end return strend原创 2016-01-31 19:44:03 · 849 阅读 · 0 评论 -
Lua封装增加ImageButton接口
添加Imagebutton接口function AddButton( png1, png2, menu, pos, fun, target, tag, zorder ) if( tag == nil ) then tag = 0; end if( zorder == nil ) then zorder = 0; end if( tag ~= 0 and menu:getChildByTa原创 2015-11-29 17:24:59 · 480 阅读 · 0 评论 -
Lua封装增加九宫Sprite接口
封装接口,增加九宫拉伸图片添加Sprite,支持removeTag替换function AddScale9Sprite(png, pos, rect, innerRect, contentSize, target, tag, zorder) if tag == nil then tag = 0 end if zorder == nil then zorder = 0 end原创 2015-11-29 17:20:39 · 730 阅读 · 0 评论 -
Lua封装增加Sprite接口
封装普通Sprite接口,支持直接传入png文件名和BatchNode添加内存中的图片,支持自动remove原有tag进行替换function AddSprite( png, pos, target, tag, zorder ) if( tag == nil ) then tag = 0; end if( zorder == nil ) then zorder = 0; end if(原创 2015-11-29 17:07:49 · 816 阅读 · 0 评论 -
Lua 中Table遍历
当我在工作中使用lua进行开发时,发现在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是:for key, value in pairs(tbtest) do XXX end for key, value in ipairs(tbtest) do XXX end for i=1, #(tbtest) do原创 2014-09-29 19:02:11 · 1854 阅读 · 0 评论 -
Lua 中pairs和ipairs 区别
lua 中pairs 和 ipairs区别标准库提供了集中迭代器,包括迭代文件每行的(io.lines),迭代table元素的(pairs),迭代数组元素的(ipairs),迭代字符串中单词的 (string.gmatch)等等。LUA手册中对与pairs,ipairs解释如下:ipairs (t)Returns three values: an ite原创 2014-09-29 11:15:50 · 1648 阅读 · 2 评论 -
Lua math 库
函数名描述示例结果pi圆周率math.pi3.1415926535898abs取绝对值math.abs(-2012)2012ceil向上取整math.ceil(9.1)10floor向下取整math.floor(9.9)原创 2014-09-29 09:56:09 · 3664 阅读 · 0 评论 -
Lua快速入门
lua作为很好的嵌入式语言可以非常好的作为c/c++补充,在游戏行业是得到了广泛的应用一直在思考,能不能把他引入商业领域的规则语言呢?将业务规则经常变的部分提炼出来,而无须重新编译程序。作为规则引擎的角色进行使用 使用前当然得安装一下去http://www.lua.org/下载一个 Lua_v5.1.4.23.exe安装,装完之后执行可以用 lua.exe逐行解原创 2014-08-29 12:44:34 · 1074 阅读 · 0 评论 -
Lua使用Vector容器
一、编写vector.pkgclass vector { TOLUA_TEMPLATE_BIND(T, string, CCSprite*) // 添加我们想要的容器类型 void clear(); int size() const; const T& operator[](int index) const; T& operator[](i原创 2014-08-25 13:41:16 · 7191 阅读 · 1 评论 -
Lua封装增加CCLabel接口
添加CCLabel接口,支持Tag替换function AddLabel( str, pos, target, tag, font, anchor, stroked, fz ) if( font == nil ) then font = G_Font_White end if( anchor == nil ) then anchor = ccp( 0.5原创 2015-11-29 17:31:37 · 676 阅读 · 0 评论 -
Lua封装根据某一列排序Table
根据Table中的某一列进行Table排序function rankTableWithCondition(dataTable,datas,condition) if #dataTable > 0 then local alreadyAdd = false for j,k in ipairs(dataTable) do if dat原创 2015-11-29 17:41:09 · 804 阅读 · 0 评论 -
Lua封装延时执行函数
延时执行函数function delayTimeGuideEvent( target, func, times ) -- 延迟时间执行函数 local delaytime = 1 if times then delaytime = times end getRoot(target):runAction(CCSequence:createWithTwoAction原创 2015-12-30 23:07:32 · 21848 阅读 · 0 评论 -
Lua封装将数字转换成万显示
将数字计算成万显示function itemNumberToString(num) if num >= 100000 then return string.format("%d万", math.floor(num / 10000)) elseif num >= 10000 then if num % 10000 < 1000 then原创 2015-12-30 22:57:56 · 2589 阅读 · 0 评论 -
Lua封装打印Table函数
Lua中根据key和call打印Tablefunction table.tostring( tbl ) local result, done = {}, {} for k, v in ipairs( tbl ) do table.insert( result, table.val_to_str( v ) ) done[ k ] = true end for k,原创 2015-12-30 22:52:53 · 1455 阅读 · 0 评论 -
Lua格式化字符串中的空格
函数传入字符串,根据正则去掉字符串两侧的空格-- 去除字符串两边的空格function trim(s) return (string.gsub(s, "^%s*(.-)%s*$", "%1"))end原创 2015-12-30 22:17:03 · 16124 阅读 · 0 评论 -
Lua封装创建枚举类型
增加创建枚举类型接口,支持枚举起始数值function CreateEnumTable(tbl, index) local enumtbl = {} local enumindex = index or 0 for i, v in ipairs(tbl) do enumtbl[v] = enumindex + i end re原创 2015-11-29 17:57:47 · 9304 阅读 · 1 评论 -
Lua封装增加CCEditBox编辑框接口
增加编辑框,支持Tag替换function AddEditBox( size, pos, target, tag, zorder ) if( tag == nil ) then tag = 0; end if( zorder == nil ) then zorder = 0; end if( tag ~= 0 and target:getChildByTag(tag) ) then原创 2015-11-29 17:53:42 · 878 阅读 · 0 评论 -
Lua封装复制Table并不关联
Lua中Table直接赋值会进行地址传递,关联两个Table,一个改变另外一个也改变local tableOld = {1,3}local tableNew = tableOldtableNew[1] = 10print(tableOld[1])返回值是10,TableOld随着TableNew的改变而改变下面的函数是为了返回一个与传入参数数值一样但不会改变原参数的Table原创 2015-11-29 17:51:12 · 1112 阅读 · 0 评论 -
Lua封装根据某种格式分割字符串
根据格式分割字符串存入Table并返回function split(str, pat) local t = {} local last_end = 0 local s, e = string.find(str, pat, 1) local i = 1 while s do --print(str, s, e, last_end, s - last_end, string.sub原创 2015-11-29 17:45:10 · 1449 阅读 · 0 评论