cocos2dx修改引擎代码进行lua绑定

之前,因为项目需求,需要重写一下贝塞尔曲线,因为贝塞尔曲线在执行时,没有把考虑执行体的角度增加进去,所以为了实现这一需求,现在要将贝塞尔重写一下。通过查看源码,发现BezierTo继承BezierBy,而执行体的位置发生变化,就是发生在BezierBy中update中。

Vec2 currentPos = _target->getPosition();

Vec2 diff = currentPos - _prevIoUsPosition;

_startPosition = _startPosition + diff;

Vec2 newPos = _startPosition + Vec2(x,y);

_target->setPosition(newPos);

_prevIoUsPosition = newPos;

从这段代码看出,currentPos和_prevIoUsPosition是一样的,所以diff是0,_startPosition是执行者最初的位置,(x,y)是相对于初始值的变化,所以针对两帧来说,位置差就是

float dix = newPos.x – currentPos.x;

float diy = newPos.y – currentPos.y;

float fDegree = 0.0f;

float fRadian = atanf(x/y);

fDegree = CC_radians_TO_degrees(fRadian);

_target->setRotation(fDegree);

(具体的讲解参见http://www.jb51.cc/article/p-tpgxzhax-bea.html

当这段代码写完之后,把它放在引擎中的BezierBy中的update方法,当我们在项目中使用贝塞尔曲线的时候,会发现执行者的角度也随之发生改变。然后这并不是我们想要的。所以这里,我就新建了两个文件BezierRBy和BezierRTo。写法上跟原来的一模一样,只不过BezierRBy的update中添加了设置角度的代码,经过编译,用C++代码执行贝塞尔曲线没有问题。然后开始把它绑定到Lua中去,因为我的项目是用Lua代码开发的。现在我是把刚才那两个类写在了< CCActionInterval.h>文件中BezierTo的下边。然后按照教程上说的,在tools/tolua/中打开cocos2dx.ini文件,寻找关于Bezier的内容


分别写上BezierR.*(仿照写就行),然后执行genbindings.py,它会将涉及到的引擎中的基础代码都执行一遍,执行完之后,会在cocos/scripting/lua-bindings/auto/下生成参见绑定的文件

然后我们在自己的lua文件中执行我们想要的贝塞尔曲线,会发现报错,原因说是create找不到,后来发现,在cocos/scripting/lua-bindings/manual/cocos2d/ lua_cocos2dx_manual.cpp下,还需要手动写上create方法


然后在cocos/deprecated/ CCDeprecated.cpp文件中找到关于Bezier中的地方,写入:


之后,再编译我们的项目,就可以看到执行者按照贝塞尔曲线运动,并且角度与切线方向一致。

关于如何自定义类绑定到lua中,以后再进行说明。

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...