您好,欢迎访问一九零五行业门户网

cocos2dx射箭等抛射物的简单解决方案

也是从网上看来的,这里记录一下 原理是利用贝塞尔曲线弓箭的旋转来造成弓箭的抛物线效果。 贝赛尔曲线: ccbezierconfig bezier;bezier.controlpoint_1 = start;bezier.controlpoint_2 = ccp(start.x+(end.x-start.x)*0.5,start.y+(end.y-start.y)*0.5+100)
也是从网上看来的,这里记录一下
原理是利用贝塞尔曲线+弓箭的旋转来造成弓箭的抛物线效果。
贝赛尔曲线:
ccbezierconfig bezier; bezier.controlpoint_1 = start; bezier.controlpoint_2 = ccp(start.x+(end.x-start.x)*0.5,start.y+(end.y-start.y)*0.5+100); bezier.endposition = ccp(end.x, end.y); float duration = 1.0f; ccbezierto *actionbezier = ccbezierto::create(duration,bezier);
其中controlpoint_1是起始点,endposition是贝塞尔曲线动画的结束点,最重要的controlpoint_2是曲线的走向,决定了曲线的最高点。想深入学习贝塞尔曲线的同学请看这里:http://www.jasondavies.com/animated-bezier/然后是旋转动画:
float angle = 45.0f; ccrotateto *actionrotate =ccrotateto::create(duration,angle);
最后让两个动画同时播放: ccspawn* actionspawn = ccspawn::createwithtwoactions(actionbezier,actionrotate);
好了,大功告成。但是这样做了之后,感觉射箭效果仍然不理想,毕竟是投机取巧的方法。为了优化视觉效果,可以调整动画播放的速度。
其它类似信息

推荐信息