him 的cocos2dx-lua群中有童鞋出现一个问题,问题是当他在lua项目中利用lua创建一个局部变量ccsprite或者cclayer等ccnode,然后在其他的函数中通过其索引取出之前创建过的ccsprite或cclayer等,取出后进行设置设置透明、坐标、缩放、runaction等大部分几率都出现无法正常缩放、透明等这些操作。群友尝试了很多方式,都没有解决掉。
其实对于此种问题很多刚接触lua开发cocos2dx的开发者都很容易遇到,其实就是个强转的问题,例如:
在 cpp中利用getchildbytag 函数获取目标tag的ccnode:
1
2
ccsprite* sp = (ccsprite*)node->getchildbytag(x);
cclayer* layer = (cclayer*)node->getchildbytag(x)
在lua中代码如下:
local sp = node:getchildbytag(x)
local layer =node:getchildbytag(x)
如上的代码一对比很多童鞋就看出来了,lua形式的并没有强转类型!是的,就是因为没有强转造成。
还有一些童鞋该疑惑了“为什么cocos2dx引擎示例中就没有使用强转呢?”
原因是由于示例基本都是采用成员变量进行的,局部变量还是有强转的操作的。
那么lua中强转一个类型函数如下:
tolua.cast(object,”ccsprite”)
第一个参数是需要强转的对象 , 第二个参数是强转的目标类型
例如我们将x 强转 ccsprite,则: tolua.cast(x,”ccsprite”)
quick-cocos2d-x 与 openquick
openquick:
quick-cocos2d-x :
简单的说: openquick 与 quick-cocos2d-x 都是针对 2d游戏 基于 lua 的免费开源框架,且都支持c2dx。
openquick :主要是将所有的c2dx的类的基础上进行了再次封装成q开头文件,开发者需在此基础上进行使用开发。
quick-cocos2d-x : 及时与cocos2dx版本匹配更新,另外它框架比较清晰,便于理解和使用。它所做的不是再次封装,然后尽可能契合cocos2dx,在此基础上做lua的扩展。
himi认为quick-cocos2d-x更适合一些,而且也是当前开发者使用居多的一款, 当然这大家可以更深入的去研究。