也是從網上看來的,這裏記錄一下
原理是利用貝塞爾曲線+弓箭的旋轉來造成弓箭的拋物線效果。
貝賽爾曲線:
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 = <span style="font-family: Arial, Helvetica, sans-serif;">45.0f</span><span style="font-family: Arial, Helvetica, sans-serif;">;</span>
CCRotateTo *actionRotate =CCRotateTo::create(duration,angle);
CCSpawn* actionSpawn = CCSpawn::createWithTwoActions(actionBezier,actionRotate);
好了,大功告成。
但是這樣做了之後,感覺射箭效果仍然不理想,畢竟是投機取巧的方法。爲了優化視覺效果,可以調整動畫播放的速度。