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

cocos2dx修改引擎代码进行lua绑定,第1张

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

之前,因为项目需求,需要重写一下贝塞尔曲线,因为贝塞尔曲线在执行时,没有把考虑执行体的角度增加进去,所以为了实现这一需求,现在要将贝塞尔重写一下。通过查看源码,发现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中,以后再进行说明。

总结

以上是内存溢出为你收集整理的cocos2dx修改引擎代码进行lua绑定全部内容,希望文章能够帮你解决cocos2dx修改引擎代码进行lua绑定所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1080991.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存