生活随笔
收集整理的這篇文章主要介紹了
【玩转cocos2d-x之三十四】绘图:CCDrawingPrimitives和CCDrawNode
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
原創(chuàng)作品,轉(zhuǎn)載請(qǐng)標(biāo)明:http://blog.csdn.net/jackystudio/article/details/18978237
最近忙出翔了,這年過(guò)的也揪心。好久沒(méi)來(lái)更新博客了,今天就來(lái)寫(xiě)一寫(xiě)cocos2d-x中圖形的繪制。
1.概述
其實(shí)cocos2d-x封裝了大量的opengl的繪圖函數(shù),我們可以很輕松的在游戲中調(diào)用。但是實(shí)際上我們很少會(huì)這么做,因?yàn)榫幋a繪圖的方式效率實(shí)在太低了,尤其是諸如一些高階貝塞爾曲線(xiàn)之類(lèi)的,官方也不建議這么做,使用圖像能更有效的提高繪圖效率,同時(shí)也會(huì)更為的美觀,也減少了一些精靈遮擋問(wèn)題和邊緣鋸齒問(wèn)題。cocos2d-x中繪圖主要有兩種方式:CCDrawingPrimitives和CCDrawNode。它們都在cocos2dx\draw_nodes目錄下。
2.CCDrawingPrimitives(原生繪圖)
2.1.特點(diǎn)
CCDrawingPrimitives必須在節(jié)點(diǎn)的draw函數(shù)中調(diào)用,draw函數(shù)每幀被調(diào)用一次,主要做一些繪制的工作。但這并不意味著它就是靜態(tài)不可改變的,我們完全可以通過(guò)修改描繪內(nèi)容的方式來(lái)動(dòng)態(tài)繪圖。比如可以直接在用觸摸的方式在屏幕上繪圖。
另外,使用CCDrawingPrimitives繪圖默認(rèn)的Z-Order是0,所以可能會(huì)被其他節(jié)點(diǎn)覆蓋,因?yàn)樗鼰o(wú)法設(shè)置Z-Order,所以只能通過(guò)設(shè)置其他節(jié)點(diǎn)的Z-Order為負(fù)值使得繪圖在最前端得以看見(jiàn)。
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(繪圖節(jié)點(diǎn))
3.1.特點(diǎn)
CCDrawNode從CCNode繼承而來(lái),是一個(gè)圖形繪制的節(jié)點(diǎn)類(lèi),它提供了幾個(gè)常用的點(diǎn)線(xiàn)面函數(shù)方便繪圖,其實(shí)在之前的游戲遮罩一文中就有寫(xiě)過(guò)。相較于CCDrawingPrimitives,這里更推薦使用CCDrawNode,
(1)它將繪圖封裝為普通節(jié)點(diǎn)的方式進(jìn)行處理,符合cocos2d-x樹(shù)狀編程的思想,同時(shí)也避免了一些遮蓋的問(wèn)題。
(2)不需要在draw函數(shù)中調(diào)用。
(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
總結(jié)
以上是生活随笔為你收集整理的【玩转cocos2d-x之三十四】绘图:CCDrawingPrimitives和CCDrawNode的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。