olua 导出工具的使用
olua 是一个基于代码生成的 lua 绑定库,能够生成 c++ 类、枚举、lambda 函数、运算符函数、实例化模版等的 lua 绑定代码,你可以对生成的细节做一些定制,比如在函数调用前后插入代码,生成带异常捕获的代码块,生成迭代器,生成 lua 注释等等。
如果想了解 olua 的设计细节,请参见:
1. 使用示例
1.1. 创建
新建一个目录存放配置和 olua 脚本,结构如下:
olua 是一个基于代码生成的 lua 绑定库,能够生成 c++ 类、枚举、lambda 函数、运算符函数、实例化模版等的 lua 绑定代码,你可以对生成的细节做一些定制,比如在函数调用前后插入代码,生成带异常捕获的代码块,生成迭代器,生成 lua 注释等等。
如果想了解 olua 的设计细节,请参见:
新建一个目录存放配置和 olua 脚本,结构如下:
Cocos2dx 原生的 lua 绑定,c++ 对象与 lua 对象的生命周期不一致,c++ 对象基于引用计数,而 lua 对象基于 lua GC,生命周期不一致,容易产生各种不可遇知的行为。所以,我想重新设计一个绑定,使用得 c++ 对象与 lua 对象生命周期一致。起初考虑过在 tolua 的基础上实现,在仔细阅读源码之后,发现如果要实现这一目标,需要修改大量的源码,于是自己重新设计了一个绑定 olua。
olua 设计之初,就定下了以 c++ 和 lua 对象生命周期一致为核心原则,所以在诸多接口的设计上都以此为目标。本文将阐述 olua 的核心设计要素与部分实现参考。
如果想了解 olua 导出工具的使用说明,请参见:
lua class model |
cocos2dx 目前 lua 对应的 c++ 对象的生命周期管理,是基于 c++ 析构函数的,也就是生命周期可能存在不一致,比如 c++ 对象已经释放,而 lua 对象还存在,如果这时候再使用,会有宕机的风险,为此我开发了 cocos-lua 项目,基于 lua gc 管理 c++ 对象的生命周期。
cocos-lua 以 cocos2d-x 3.17.2 的 c++ 项目为基础,采用基于 lua gc 来管理 c++ 对象的生命周期,提供更丰富 cocos2d-x lua api,包括几乎除模版以外的所有 lambda(schedule、scheduleOnce…)函数回调,能够极大减少在 lua 层使用 c++ 对象的负担。
对比 cocos2dx-lua 目前方案,有以下几个优势
在最近参与开发的 adobe air 项目中,前后端的通信协议从 XML、JSON 再到 protobuf,最后选择 protobuf 原因,主要是前后端维护 protobuf 协议就行了,同时还可以利用 IDE 做一些编译检查。
目前我能找到的 protobuf as3 开源库,都存在一些问题:不支持嵌套类,生成代码无法编译 等等。于是花了一点时间,参考 google protobuf 相关说明,编写 protobuf-as3 以及 protoc-as3,用于支持运行时及代码生成 Github。
protobuf-as3 库只支持 proto3 格式,proto3 列出的数据类型基本都支持。
以下 proto 文件将生成 5个 as3 类:Token.as、Token$Type.as、TokenBindingResponseCode.as、TokenBindingRequest.as、TokenBindingResponse.as。我们以 $ 作为分隔符以实现 protobuf 类的嵌套。
syntax = "proto3"; |
Spine 是一个很好的制作 2D 骨骼动画的软件,其中提供的混合 (mix) 动画功能可以很柔和过度两个不同的动画,但在混合时期,稍有不善,非常容易出现各种错乱。在 Spine2D 骨骼动画群上,有人提出全 K 帧、K 透明轴等等方法,这些方法往往只是恰好解决了一些问题,但还有相当一部分潜在的问题还是可能发生的。
在使用过程中,我发现 Spine 的错乱问题主要表现在以下两个方面:
A:●—————————●——
B: ●——————————
| 混合时期 |
lua 是一门简单的语言,不带类和属性封装,但可以使用 lua 强大的元表模拟实现:
local type = type |
cd ~ |
:BundleInstall |
cd ~/.vim/bundle/YouCompleteMe |