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);
	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);


好了,大功告成。

但是這樣做了之後,感覺射箭效果仍然不理想,畢竟是投機取巧的方法。爲了優化視覺效果,可以調整動畫播放的速度。




發佈了35 篇原創文章 · 獲贊 11 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章