`
song020cn
  • 浏览: 63071 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

import CC_SYNTHESIZE field with tolua_property quickly

lua 
阅读更多

以下实现方式基于Quick-cocos2d-x 2.1.4,使用cocos2d-x版本的同学请自行修正。

 

C++数据类定义

 

class SHAccountData : public CCObject {
    CC_SYNTHESIZE(long long, _gameId, GameId);
    CC_SYNTHESIZE(int, _sessionId, SessionId);
    CC_SYNTHESIZE(int, _serverId, ServerId);

public:
    SHAccountData() : _gameId(0L), _sessionId(0), _serverId(0) {}
    ~SHAccountData() {}
};

 

 

以往,不知道 tolua_property 之前,我采用的笨办法来编写tolua描述文件

 

class SHAccountData : public CCObject {

public:
    long long getGameId();
    int getSessionId();
    int getServerId();
    void setGameId(long long var);
    void setSessionId(int var);
    void setServerId(int var);

    SHAccountData();
    ~SHAccountData();
};

 

 

这才3个属性,从3行代码编程6行,工作量还OK。20个,100个属性呢?

 

认认真真地抽时间阅读了一遍《tolua++ reference manual》后,终于找到一条捷径。

 

新的tolua描述文件

 

class SHAccountData : public CCObject {

public:
	tolua_property__java long long gameId;
	tolua_property__java int sessionId;
	tolua_property__java int serverId;
	
	SHAccountData();
	~SHAccountData();
};

 

 

这里用到了自定义的 Property types。

另外,注意 tolua_property__java,"property"和"java"之间是两个下划线,不是一个。

 

这时候,想要顺利编译的时候,需要修改 ${projectName}/luabinding/basic.lua (PS:每个人的目录结构不一样,请自行修正)。

-- usage: (use instead of ant)
-- tolua++ "-L" "basic.lua" "-o" "../../scripting/lua/cocos2dx_support/LuaCocos2d.cpp" "Cocos2d.pkg"

_is_functions = _is_functions or {}
_to_functions = _to_functions or {}
_push_functions = _push_functions or {}

function get_property_methods_hook(ptype, name)
	name = name:gsub("^%l", string.upper)
	if ptype == "java" then

		return "get"..name, "set"..name
	end

	if ptype == "java_bool" then

		return "is"..name, "set"..name
	end
	-- etc
end

local CCObjectTypes = {
    "UnitManager",
    "GoObject",
    "GoObjectList",
    "GoMap",
}

-- register CCObject types
for i = 1, #CCObjectTypes do
    _push_functions[CCObjectTypes[i]] = "toluafix_pushusertype_ccobject"
end

…………

 

get_property_methods_hook部分,是需要大家补充的。

 

由于我是从Java语言转到C++上的,所以习惯了JavaBean的格式。如果需要转为别的属性命名规范,请自行修改。

0
0
分享到:
评论

相关推荐

    alu.zip_Cyclone_altera_de2_logic_logic synthesize

    本项目“alu.zip_Cyclone_altera_de2_logic_logic_synthesize”则专注于通过VHDL编程语言,利用Altera公司的Cyclone系列 FPGA 芯片——DE2开发板,对ALU进行逻辑综合。 首先,ALU的设计通常包括加法器、减法器、...

    Objective-C中的@property和@synthesize用法详解

    相信每个初学者对@property和@synthesize都感到非常的陌生,在此给大家分享下我的自己的理解,有不当之处,还望多多指教。详细说明文章在下面连接http://blog.csdn.net/comeontom/article/details/7455459

    iOS开发中属性 property 和 synthesize 详解

    ### iOS开发中属性property和synthesize详解 #### 一、引言 在iOS开发过程中,`@property` 和 `@synthesize` 是两个非常重要的概念。它们不仅简化了代码编写过程,提高了开发效率,还增强了程序的可维护性。本文将...

    RWSingleton:在ObjC中快速创建单例类的宏

    在MyOjbect.h ,单行添加为: # import " RWSingletonMacro.h "@interface MyObject : NSObjectRW_DECLARE_SINGLETON_FOR_CLASS_WITH_ACCESSOR (MyObject, sharedObject)@end 在MyObject.m : # import " MyObject....

    ook-doorbell (1)_ook_Radio_CC1101_Doorbell_源码

    标题中的"OOK-doorbell (1)_ook_Radio_CC1101_Doorbell_源码"揭示了这个项目是关于实现一个基于OOK调制技术的无线电门铃系统,且使用了CC1101芯片作为无线通信的核心。OOK(On-Off Keying)是一种最简单的数字调制...

    innovus中ccopt常用设置选项.pdf

    `synthesize_ccopt_flexible_htree`命令对创建的灵活H树进行综合,优化其结构以满足设计要求。 9. **获取不同类型的时钟树网**: `get_ccopt_clock_tree_nets`命令用于获取顶级、主干和叶子网,分别对应于时钟树...

    Python库 | synthesize-0.0.1-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:synthesize-0.0.1-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    3D-Synthesize3DviaDepthOrSil.zip

    3D-Synthesize3DviaDepthOrSil.zip,[CVPR 2017]通过建模多视图深度图或轮廓生成和重建三维形状,3D建模使用专门的软件来创建物理对象的数字模型。它是3D计算机图形的一个方面,用于视频游戏,3D打印和VR,以及其他...

    Synthesize & Power Analyze

    Synthesize & Power Analyze

    Objective-c解析XML封装

    @property (nonatomic, retain) NSMutableString *currentResult; @property (nonatomic, retain) NSMutableDictionary *map; @property (nonatomic, retain) NSMutableArray *list; -(NSMutableDictionary *)...

    Android代码-Synthesize

    Synthesize Synthesize is an android library which can create layout images in background threads, services, etc without inflating them in activity or fragments. Synthesize Documentation

    OC-模型的Setter,Getter的由来,@property的由来

    @property还可以与@synthesize关键字一起使用,但现代的Xcode版本默认已经为@property声明的属性自动生成了对应的实例变量和存取方法,所以我们通常不再需要显式地使用@synthesize。 此外,@property还支持更多的...

    基于C++的植物与沙漠动态模拟

    that can be used to synthesize sandy terrain with vegetation covers. For realizing a real-time simulation process, we implemented the method on the programming graphics processing unit (GPU). We tried...

    IOS开发之@property的详细介绍

    在iOS开发中,`@property` 是Objective-C中的一个关键字,用于声明类的实例变量(ivar)并自动合成存取方法(setter和getter)。通过使用`@property`,开发者可以方便地控制实例变量的访问权限、内存管理策略、线程...

    FPGA脚本实验

    在电子设计领域,FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,它允许用户根据需求自定义硬件逻辑。Altera是知名的FPGA供应商之一,提供了一系列先进的工具和技术来支持FPGA的设计和开发。"FPGA脚本...

    ios 单利的完整使用实例 及销毁 宏定义

    我们使用`SYNTHESIZE_SINGLETON_FOR_HEADER`宏定义了单例模式的头文件部分,并使用`SYNTHESIZE_SINGLETON_FOR_CLASS`宏定义了单例模式的实现部分。 五、单例模式的销毁 在某些情况下,我们需要销毁单例模式,以便...

    IIR_FIR_Filters Design Tools

    This program will also synthesize FIR filters with the Parks McClellan algorithm. If you are familiar with this algorithm, you know that it requires the filter to be described in bands. This program's...

    matlab图片灰度化代码-texturesynth:非参数采样的Efros-Leung纹理合成的Matlab实现

    以下是如何使用synthesize_texture函数的示例(来自synthesize_texture_test.m ): input_image = im2double(imread( ' 161.png ' )); output_image = synthesize_texture(input_image, 256 , 256 , 9 ); imwrite...

    Python库 | tencentcloud-sdk-python-tts-3.0.313.tar.gz

    2. `async_synthesize`接口:异步合成接口,适合处理大篇幅文本或需要快速响应的场景,它会返回一个任务ID,开发者可以通过此ID查询任务状态和下载结果。 3. `get_synthesis_task`接口:查询指定任务的状态,如是否...

Global site tag (gtag.js) - Google Analytics