LUA程序设计
Hak-ka
坚持,勿忘初心!
展开
-
lua中实现倒计时
今天在开发的时候,涉及到了使用倒计时来显示。首先自己的思路是:1、设计显示的Lable。2、对传入的时间进行处理,转成字符串00:00:00。通过调用回调函数来控制一秒刷新一次。转换算法:h = math.floor(time / 3600), m = math.floor((time % 3600) / 60), s = math.floor((time / 3600原创 2013-12-16 17:24:43 · 6391 阅读 · 0 评论 -
Lua程序设计任务系统和NPC
最近自己的新任务是涉及游戏中的任务系统。设计的过程中,遇到第一个问题是下拉列表的设计。第二个是对服务端数据的处理。第三个是通过链接切换到另一个版面。 对于下拉列表的设计,刚开始进行了网上搜索,大部分说使用第三方软件,自己问了主程,他说没这个必要。或者找到的是不符合自己要求。自己的下拉菜单在高度可以变化的情况下,超过三个要进行滑动。之前自己邮件系统的时候使用过滑动。这个是自己的一个同事告诉自己原创 2013-11-20 23:04:00 · 2302 阅读 · 0 评论 -
lua设计宠物系统
上个星期开始宠物系统设计,刚刚看文案的时候。主要问题是设计八个精灵绕圈转动。前几个系统有做个上下左右滑动的,但是没有涉及到精灵。首先,自己在触摸区设定左右转动的手势。接下来要处理的就是,各个精灵在每次执行move动作后位置的重置。我是通过固定的八个位置,每个精灵左移或者右移后,调换精灵table里精灵位置。 在这次设计中,还涉及到按钮控制移动。这个道理跟滑动的时候一样。只是要把按钮和手触摸滑动的参原创 2013-12-09 22:04:29 · 845 阅读 · 0 评论 -
lua中table存储数据
今天自己对宠物系统的数据进行本地维护,之前我一个同事告诉我使用id作为键。当时自己并没有完全领悟到。今天自己为了维护数据。特意去看了一下他的这部分代码。local new_goods_list = {} for _, v in pairs(protocol_data.goods_list) do new_goods_list[v.goods_id] = v原创 2013-12-10 10:52:18 · 2179 阅读 · 0 评论 -
lua中table活用
今天,因为很多资源不完全。自己的任务并不能完整进行。然后自己看了框架有关公用部分的代码。这里最主要的收获是,自己在解决多个条件的时候,只会使用if来控制。经常导致代码很臃肿。其实在lua中,我们可以使用table来实现C++的多态。把if中的条件写在table里面。通过添加多一层来控制。以下是从我同事那边看到的代码:function RoleBagChildLayer:InitNetWor原创 2014-01-02 20:41:45 · 512 阅读 · 0 评论 -
Cocos2d-x内存管理
Cocos2d-x引擎的核心是用C++编写的,那对于所有使用该引擎的游戏开发人员来说,内存管理是一道绕不过去的坎。关于Cocos2d-x内存管理,网上已经有了许多参考资料,有些资料写的颇为详实,因为在内存管理这块我不想多费笔墨,只是更多的将思路描述清 楚。一、对象内存引用计数Cocos2d-x内存管理的基本原理就是对象内存引用计数,Cocos2d-x转载 2015-01-22 22:39:19 · 427 阅读 · 0 评论 -
Code Review最佳实践
Code Review最佳实践 Posted on 05/14/2015 by jhuang关于Code Review的重要性,我相信好的工程师都能认识到。 参考 让Code Review称为一种习惯 和 从Code Review谈如何做技术。同时引用一下有人对Google Code Review的描述:The biggest thing that转载 2015-05-20 09:23:19 · 420 阅读 · 0 评论 -
lua查找两张table的相同值
今天在组队系统的时候,涉及到提取两张表里面的相同元素。以前自己在C++的时候使用STL库提供的set。在lua并没有相对应的库,网上有说到用到元表。其实对于量不大的操作,我们还是可以直接使用for循环来遍历,时间效率上不会差太大。使用for的时候我们可以优化一下,例如用折半,或者先排序。数据量大的表放在外层。原创 2013-11-29 12:49:34 · 6959 阅读 · 0 评论 -
lua排序table的闭包函数使用
lua的函数作为“第一类值”。函数可以作为变量,也可以作为实参传递给其他函数。lua自带的table.sort(table, var)排序方法。var作为一个参数,自然可以为函数。这个函数要接受两个参数,并要return一个boolean值。eg:table.sotr(table_name, function(a, b) return a.name>b.name end)这样我们就完成了在ta原创 2014-01-09 11:31:58 · 712 阅读 · 0 评论 -
lua使用table问题
今天在开发的时候,自己建立了一个table。建立代码如下: self.skill_value_table = { skill_id = 0, show_type = 3, } self.skill_table = {} for i = 1, 8 do self.skill_table[i] = self.skill_value_tabl原创 2014-01-03 17:45:45 · 629 阅读 · 0 评论 -
Cocos2d-x 3.0目录结构
build打开win32项目cocos每个目录对应存放的类库 2d(核心图形引擎、事件响应引擎、底层平台支持)、audio(不同平台的音频引擎支持)、base(Cocos2d-x模仿Objective-c的Foundation框架的一些基本类以及3.0增加的模仿C++11的容器类扩展支持,比如:__Array、__Dictionary、Data、Vector等)、editor-s原创 2016-01-15 20:35:27 · 403 阅读 · 0 评论 -
批处理创建cocos
在新建项目的时候再命令行敲入有点麻烦,所以想到了批处理文件1、新建一个tex文件,输入代码:@echo off echo =============Cocos2D-x新建项目============== set /p name=输入项目的名称: echo 项目名为: %name% set /p typename=输入项目类型:echo 输入项目类型原创 2016-01-15 12:53:07 · 412 阅读 · 0 评论 -
cocos2dx中使用JPG图和只带Alpha的PNG图合成渲染
http://www.cnblogs.com/elang/p/4104452.html转载手游控制安装包的大小是非常重要的,这里介绍一种方法。将带Alpha通道的PNG图片分拆成RGB和Alpha分别保存,其中保存RGB的这张图把它转换成JPG格式的文件,保存Alpha图片的就用PNG格式的。原理是JPG格式的压缩率比较的高可以减小图片的大小,但是它没有Alpha,而Alpha数据单独拎出转载 2016-03-10 14:26:29 · 735 阅读 · 0 评论 -
cocos2dx ListView 动态加载(代码)
http://www.cnblogs.com/dudu580231/p/4924192.html原文cocos2dx ListView 动态加载(代码)其实是根据上篇文章得出的:在ListView中加载少量的内容,然后在滑出界面的时候在加载一部分剩余的内容,这样实现动态加载!!! 为了看出效果来,需要建立一个场景,然后点击按钮转载 2016-03-10 14:35:14 · 3070 阅读 · 0 评论 -
cocos2d-x手游性能优化总结
http://codingnow.cn/cocos2d-x/1658.html原文近段时间在使用cocos2d-x开发2D手游,技术方案使用的是cocos2d-x+lua,因为游戏使用的是cocos2d-x 2.1.5版本,有些优化方案在最新版的cocos2d-x版本已经实现了。这篇文章主要是总结在使用cocos2d-x2.x版本+lua技术方案时遇到的问题和一些性能优化总结。转载 2016-03-11 16:16:13 · 887 阅读 · 0 评论 -
程序设计思考
上周到现在,自己一直在熟悉框架的同时设计邮件系统的UI。从中自己要认真总结的问题是:1、程序设计的思路,尽可能的提供多的接口。 不能大概的逻辑通过即可;2、提高代码阅读质量(良好的编程风格);3、对细节的考虑、查看程序是否有内存泄露、自己是否采用了最优算法,能否满足不断变化的需求对程序进行修改;4、要有思考的过程,不断的优化。不是跟别人那拿一个设计的思路就满足。努力奔向卓越。原创 2013-11-01 22:06:35 · 622 阅读 · 0 评论 -
程序设计之LUA设计邮件系统
今天通过一周多的时间,把邮件系统提交了。但是还没测,还有很多细节需要继续修改。 自己程序设计的原则:1、满足需求不断变化的需求;2、时候使用最有算法;3、是否存在内存泄露;4、程序模块化。虽然自己设计的并不能满足以上的要求,基本还处于功能实现,逻辑基本疏通。跟自己的同事和主程间还有好长的一段路走。 首先自己设计邮箱系统有以下模块:收件列表,写信,每封信件详细信息(分个人邮原创 2013-11-01 19:57:54 · 3274 阅读 · 0 评论 -
lua实现OOP编程
今天学习lua实现oop,主要参考了云风的博客点击打开链接和半山无极点击打开链接两个人里面写的。通过__index和__newindex这两种元方法的使用。 每个类都有一张虚表来存储对象的信息(_class)。通过new方法来创建对象,为对象设置元表,它的索引方式就是__index和__newindex。这两种索引可以包含函数和表。__newindex是函数的时候,会传递表、索引原创 2014-02-07 19:56:17 · 1103 阅读 · 0 评论 -
忽略细节的代价
在看代码或者看书的时候,由于只看了一半或者是读的不够仔细,经常把一些记错。在刚开始开发的时候,看之前框架的代码。 if(self.emailitemlayers ~= nil) then self:RemoveAllChild(true) end self.emailitemlayers = {}看了之后,自己每次删除table里面存储的类就使用 if(self.emai原创 2014-01-08 18:33:49 · 615 阅读 · 0 评论 -
lua元表
前几天自己转载了一篇文章“lua,让人惊叹的艺术”。里面对lua的解析个人感觉很精辟。文中也讲到了元表。在我看了,元表本身也是一张普通的表,但是它带有特殊的回调事件。当我们把一个表添加一些方法,通过setmettatable,把方法设置到某个对象,进而影响这个对象的行为和方法。于此实现了运算符的重载,在进行相关操作的时候,如“+”,lua会自动解析。通过元表,我们也可以实现OOP编程。这一方面自己原创 2014-01-15 16:08:45 · 511 阅读 · 0 评论 -
lua中函数的回调
lua中函数也可以作为变量进行传递。在传递的过程中。通过定义好的函数,通过回调,把数据传递到原来的函数。 eg. local func = function(data)print(data) end local call = function(func) if func thenfunc(15原创 2014-01-26 17:59:07 · 2202 阅读 · 0 评论 -
通过__index实现创建子类对象
在这里实现了对象的实例,但是还未实现继承。后续填上完整的OOP原创 2014-02-08 17:48:44 · 543 阅读 · 0 评论 -
__index有关继承的典型示例
--__index有关继承的典型示例Window = {}Window.prototype = {x = 0, y = 0, width = 100, height}Window.mt = {}function Window.new(o) setmetatable(o, Window.mt) return oendWindow.mt.__index = func原创 2014-02-08 15:29:27 · 520 阅读 · 0 评论 -
读lua程序设计之函数
lua中定义局部函数的时候通常有两种方法:1、local f = function() end 2、local function f () end。这两种情况在我们使用递归的时候需要注意。第一种定义情况下的递归:local foo = function(n) if n == 0 then return 1 else return n*foo(n-1原创 2014-01-09 14:48:46 · 524 阅读 · 0 评论 -
lua弱表引用
1、普通垃圾回收原创 2014-06-16 17:39:29 · 1939 阅读 · 0 评论 -
OOP初始化
在我们项目使用的lua中的oop,对y原创 2014-04-17 22:05:46 · 479 阅读 · 0 评论 -
lua元方法__newindex
--当对一个table中不存在的索引赋值时,解释器就会查找__newindex元方法。如果有就调用它,而不是直接赋值。如果这个元方法指向一个table(_t),Lua将对此table(_t)赋值,而不是对原有的table(agency_t)赋值t = {} --原来的tablelocal _t = t --保持对原有table的私有访问。local agency_t =原创 2014-06-17 11:03:55 · 557 阅读 · 0 评论 -
lua元方法__index
--__index用于访问 Window = {}local prototype = {x = 0, y = 0, width = 100, height = 100} function Window.new(o)local mt = {__index = function(table,key) return prototype[key] end}--o的元方法原创 2014-06-16 21:02:37 · 492 阅读 · 0 评论 -
VS2010安装boost库
1.下载最新的boost并解压到当前文件夹2.(我放在D:/cpp目录下)3.打开VS2010->VS TOOLS->VS命令提示4.CD D:/cpp/boost_1_46_1 5.输入bootstrap,便生成bjam.exe文件6.输入bjam toolset=msvc-10.0 variant=debug,release threading=mult原创 2014-08-05 14:26:06 · 391 阅读 · 0 评论 -
在vs2010搭建lua
1、从官网下载lua源码http://www.lua.org。 2、在vc的win32控制台下创建项目名为lua。选择为静态编译库。 3、在解压源码的目录src下吧所有的.h和.c加入工程,然后编译。在DEBUG下把lua.lib文件取出。 4、新建文件夹lib_include,在里面新建两个子文件夹lib和include。把之前编译好的lua.li原创 2014-02-11 09:04:23 · 777 阅读 · 0 评论 -
VS2010编译luabind
1、解压下载回来的luabind压缩包,假设解压到d:\luabind-0.8.1\,Boost解压到d:\boost 1_38_0\,lua解压到d:\lua 5.1.4\ 在VS中新建一个静态库项目,将d:\luabind-0.8.1\src下的源码全部添加到项目中,然后在项目中新建luabind和luabind\detail\两个虚拟文件夹,对应的将d:\luabind-0.8.原创 2014-08-05 16:55:29 · 623 阅读 · 0 评论 -
http和socket
http是一个在TCP传输协议上层的应用层协议,所以它是一个协议。所谓协议是指交流的双方要相互理解对方消息的意义,而制定的一个规范:规定每个消息按什么样的格式组织,这样发送者按这个规定组织消息,接收这按同样的规定来理解消息,这样交流就没障碍和歧义了。现在互联网相关的协议非常之多,而且都制定的很完善,除了http外,还有很多,比如常用的ftp、smtp、pop,还有之前你看过原创 2014-09-22 19:19:27 · 396 阅读 · 0 评论 -
lua 打印函数调用堆栈
local _trace = debug.tracebacklocal _t_concat = table.concatlocal _log = printfunction print_stack(...) local out = {'[TRACE]'} local n = select('#', ...) for i=1, n, 1 do原创 2017-03-02 15:47:34 · 7955 阅读 · 0 评论