原創作品,轉載請標明:http://blog.csdn.net/jackystudio/article/details/18978237
最近忙出翔了,這年過的也揪心。好久沒來更新博客了,今天就來寫一寫cocos2d-x中圖形的繪制。
1.概述
其實cocos2d-x封裝了大量的opengl的繪圖函數,我們可以很輕松的在游戲中調用。但是實際上我們很少會這么做,因為編碼繪圖的方式效率實在太低了,尤其是諸如一些高階貝塞爾曲線之類的,官方也不建議這么做,使用圖像能更有效的提高繪圖效率,同時也會更為的美觀,也減少了一些精靈遮擋問題和邊緣鋸齒問題。cocos2d-x中繪圖主要有兩種方式:CCDrawingPrimitives和CCDrawNode。它們都在cocos2dx\draw_nodes目錄下。
2.CCDrawingPrimitives(原生繪圖)
2.1.特點
CCDrawingPrimitives必須在節點的draw函數中調用,draw函數每幀被調用一次,主要做一些繪制的工作。但這并不意味著它就是靜態不可改變的,我們完全可以通過修改描繪內容的方式來動態繪圖。比如可以直接在用觸摸的方式在屏幕上繪圖。
另外,使用CCDrawingPrimitives繪圖默認的Z-Order是0,所以可能會被其他節點覆蓋,因為它無法設置Z-Order,所以只能通過設置其他節點的Z-Order為負值使得繪圖在最前端得以看見。
2.2.API
[cpp]?view plaincopy
?? void?CC_DLL?ccDrawPoint(?const?CCPoint&?point?);?? ?? ?? void?CC_DLL?ccDrawPoints(?const?CCPoint?*points,?unsigned?int?numberOfPoints?);?? ?? ?? void?CC_DLL?ccDrawLine(?const?CCPoint&?origin,?const?CCPoint&?destination?);?? ?? ?? void?CC_DLL?ccDrawRect(?CCPoint?origin,?CCPoint?destination?);?? ?? ?? void?CC_DLL?ccDrawSolidRect(?CCPoint?origin,?CCPoint?destination,?ccColor4F?color?);?? ?? ?? void?CC_DLL?ccDrawPoly(?const?CCPoint?*vertices,?unsigned?int?numOfVertices,?bool?closePolygon?);?? ?? ?? void?CC_DLL?ccDrawSolidPoly(?const?CCPoint?*poli,?unsigned?int?numberOfPoints,?ccColor4F?color?);?? ?? ?? void?CC_DLL?ccDrawCircle(?const?CCPoint&?center,?float?radius,?float?angle,?unsigned?int?segments,?bool?drawLineToCenter,?float?scaleX,?float?scaleY);?? void?CC_DLL?ccDrawCircle(?const?CCPoint&?center,?float?radius,?float?angle,?unsigned?int?segments,?bool?drawLineToCenter);?? ?? ?? void?CC_DLL?ccDrawQuadBezier(const?CCPoint&?origin,?const?CCPoint&?control,?const?CCPoint&?destination,?unsigned?int?segments);?? ?? ?? void?CC_DLL?ccDrawCubicBezier(const?CCPoint&?origin,?const?CCPoint&?control1,?const?CCPoint&?control2,?const?CCPoint&?destination,?unsigned?int?segments);?? ?? ?? void?CC_DLL?ccDrawCatmullRom(?CCPointArray?*arrayOfControlPoints,?unsigned?int?segments?);?? ?? ?? void?CC_DLL?ccDrawCardinalSpline(?CCPointArray?*config,?float?tension,??unsigned?int?segments?);?? ?? ?? void?CC_DLL?ccDrawColor4B(?GLubyte?r,?GLubyte?g,?GLubyte?b,?GLubyte?a?);?? ?? ?? void?CC_DLL?ccDrawColor4F(?GLfloat?r,?GLfloat?g,?GLfloat?b,?GLfloat?a?);?? ?? ?? void?CC_DLL?ccPointSize(?GLfloat?pointSize?);??
2.3.示例
代碼使用的是TestCpp中代碼。
3.CCDrawNode(繪圖節點)
3.1.特點
CCDrawNode從CCNode繼承而來,是一個圖形繪制的節點類,它提供了幾個常用的點線面函數方便繪圖,其實在之前的游戲遮罩一文中就有寫過。相較于CCDrawingPrimitives,這里更推薦使用CCDrawNode,
(1)它將繪圖封裝為普通節點的方式進行處理,符合cocos2d-x樹狀編程的思想,同時也避免了一些遮蓋的問題。
(2)不需要在draw函數中調用。
(3)使用批處理繪圖,提高了繪圖效率。
3.2.API
[cpp]?view plaincopy
?? void?drawDot(const?CCPoint?&pos,?float?radius,?const?ccColor4F?&color);?? ????? ?? void?drawSegment(const?CCPoint?&from,?const?CCPoint?&to,?float?radius,?const?ccColor4F?&color);?? ????? ?? void?drawPolygon(CCPoint?*verts,?unsigned?int?count,?const?ccColor4F?&fillColor,?float?borderWidth,?const?ccColor4F?&borderColor);??
3.3.示例
代碼也是TestCpp中的代碼。
4.源碼下載
可以自己看TestCpp示例,也可以從這里下載:http://download.csdn.net/detail/jackyvincefu/6903357
總結
以上是生活随笔為你收集整理的【玩转cocos2d-x之三十四】绘图:CCDrawingPrimitives和CCDrawNode的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。