lua肯定是可以用__index和__newindex来实现getter和setter的,但cocos2d-x自带的tolua有个内建的getter和setter机制,不过可能年久失修,有些地方只接受c函数,有些地方接受lua函数,有些地方是cobj, key, value的参数形式,有些地方是cobj, value的参数形式,我统一改成了后者(这也符合cocos2d-x的参数形式):
https://github.com/WuJiayiSH/cocos2d-x-3rd-party-libs-bin/commit/58bcf0f3654b044a339ef7df4f44a7bed313861b
然后就可以在lua里添加自己想要的getter和setter:
cc.Node[".get"] = {
x = cc.Node.getPositionX, -- getter c函数
y = cc.Node.getPositionY,
width = function(self) return self:getContentSize().width end, -- getter lua函数
height = function(self) return self:getContentSize().height end,
}
cc.Node[".set"] = {
x = cc.Node.setPositionX, -- setter c函数
y = cc.Node.setPositionY,
width = function(self, width) self:setContentSize(width, self:getContentSize().height) end, -- setter lua函数
height = function(self, height) self:setContentSize(self:getContentSize().width, height) end,
}
-- 逻辑代码
node.x = 100
print(node:getPositionX()) -- 100
node:setContentSize(300, 200)
print(node.width, node.height) -- 300 200
