`
song020cn
  • 浏览: 61876 次
  • 性别: 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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics