摘要:#需求 随着项目组越来越大,Lua配置表内存占用越来越大,峰值超过60M。这导致在1G内存设备想达标就很困难了,可以说是必须解决的问题。 #优化思路 把Lua配置表转成二进制自动格式,导出到Lua成一个Userdata,通过给userdata一个特别设计的Metatable,使它访问起来和普通的配置
阅读全文
摘要:开源定点数库fpm,并导入到lua中使用 https://github.com/MikeLankamp/fpm # 本质 把浮点数*65336,取整。所有运算是整数运算,从而保证一致性 # 问题 效率通过对比,差不多有一倍略多的损耗。 # 改进 lua53中,支持//操作,对于操作数都是整数的情况下
阅读全文
摘要:如果是c#代码出错了 会在所有导出的方法里,增加try catch,然后把错再抛到lua里。 如果是lua代码出错了 会同时抛出c#的exception,这样c#的栈才能正确处理
阅读全文
摘要:#下载lua包lua-5.3.5 #vs2017新建个空工程,删除lua.c,luac,c,设置配置类型 动态库.dll #编译完成
阅读全文
摘要:1使用unsafe,直接修改字符串 修改text部分 但是有个坑,lua是utf8编码,而c#里是ucs2b编码,所以需要做个转换,明天补上 需要2个方法,一个是获取utf8编码个数 一个是从utf8转到unicode(utf16) 修改text部分
阅读全文
摘要:起因是ulua里,从luajit读字符串到c#里,做了编码转换,如下 public static string lua_tostring(IntPtr luaState, int index) { var kind = lua_type(luaState, index); if (kind == L
阅读全文
摘要:cocos2dx里加载cocosudio导出的ui配置文件,在这之上封装了一下,封装核心类包括UIManager,UILayer,UIOwnerUIManager是所有ui总的管理类,代码如下:UIManager = { battle = 1, city = 2, login = 4, ...
阅读全文
摘要:local uilocal function createLayerUI() if not ui then ui=cc.Layer:create(); createLayerUI=nil; end return ui;endlocal sclocal function createLayerSc...
阅读全文
摘要:local uilocal function createLayerUI() if not ui then ui=cc.Layer:create(); createLayerUI=nil; end return ui;endlocal sclocal function createLayerSc...
阅读全文
摘要:local uilocal function createLayerUI() if not ui then ui=cc.Layer:create(); createLayerUI=nil; end return ui;endlocal sceneGame=cc.Scene:create()sce...
阅读全文
摘要:2d手游引擎,至少要提供5个解决方案:1UI2角色怪物动画3场景4粒子5音频视频语言选择使用c++,脚本使用lua,c++需要提供的核心API包括1图片加载接口_Image.new2图片文字渲染接口_Image:draw()3音频视频接口soundgroup:play4事件接口_app:onIdle...
阅读全文
摘要:sql的通用缓存,是实现最麻烦的一部分,对于查询结果的缓存,主要有如下的结构来缓存:cache tablename--player statement--select * from player where vip>1 key1 key2 ...
阅读全文
摘要:事件机制主要用于服务器逻辑处理,形式如下:define.Func1{Arg1=0, Arg2=‘abc'}--定义事件,Func1为事件名,Arg1=0, 指Arg1参数默认值为0,Arg2='abc'指Arg2参数默认值为0,主要用于参数类型验证when{}function Func1(Arg1,...
阅读全文
摘要:在(一)中,介绍了c对lua层的拓展,这边主要写lua层的网络部分,目标是实现RPC调用,实现主要是三部分:1通信协议(消息的序列化和反序列化)rpc调用主要信息包括方法名,方法参数,设计的通信协议如下:字节长度(4字节)|方法名|方法参数因为方法参数是由1个表序列化来的,必然以’{‘开头,所以可以...
阅读全文
摘要:上一篇说的是liua的net拓展,这一篇说lua的sql拓展,准确说是mysql拓展,这里推荐下postgre,比mysql好用,支持数组,各种好,不过腾讯平台不支持,所以你的公司要和腾讯合作,掂量下吧c部分本质使用prestatement接口:_sql.new(host, user, passwo...
阅读全文
摘要:把工作几年服务器相关的部分内容,通过服务器解决方案,做一次总结。整个实现的主体是lua脚本,lua实现主要缺少的两大块:1网络部分2数据库部分这两部分必须通过c/c++做扩展先来做net,主要是服务器net,和客户端net。服务器发起连接的情况主要是用于和平台验证,上报之类的,还有服务间通信,接口如...
阅读全文
摘要:lua对象json序列化,很简单,没做中文的unicode编码了local function bool2json(v) return v and "true" or "false";endlocal function string2json(s) return table.concat({"\"", s, "\""});endlocal allowedkey={ ["boolean"]=true, ["number"]=true, ["table
阅读全文
摘要:lua中,如果碰到某个属性值改变了,但是修改的地方又特别多,调试就特别麻烦了,有个小技巧,直接贴代码local m = { __index = function( t, k ) if k == "x" then-- print( "看看属性", k );-- print( debug.traceback() ); end return t._old[k]; end, __eq = function( t, k, v ) print( "看看属性", k ); t._old[k]=v; end, __newindex = functio
阅读全文
摘要:lua面向对象的一个封装,直接贴代码--swfclass = {};local cs = {};function _class( child, base, ... )-- _.s( child ); if( cs[ child ] ) then error( "duplicate class : " .. child ) end; local c = _G[child]; table.copy( c, base or {} ); for ii = 1, select("#", ...) do table.copy( c, select(ii, ...)
阅读全文
摘要:自己写的lua解析json,带容错,如果要是用于格式检查,得修改下。很简单直接贴代码--------------------------------------------------json解析----------------------------------------------------------local function json2true(str,from,to) return true, from+3endlocal function json2false(str,from,to) return false, from+4endlocal function json2nu
阅读全文