日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【玩转cocos2d-x之三十四】绘图:CCDrawingPrimitives和CCDrawNode

發布時間:2024/4/11 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【玩转cocos2d-x之三十四】绘图:CCDrawingPrimitives和CCDrawNode 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原創作品,轉載請標明: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
  • //繪制一個給定x,y值的點??
  • 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?);??
  • ??
  • //設置繪制顏色,4個byte型??
  • void?CC_DLL?ccDrawColor4B(?GLubyte?r,?GLubyte?g,?GLubyte?b,?GLubyte?a?);??
  • ??
  • //設置繪制顏色,4個float型??
  • void?CC_DLL?ccDrawColor4F(?GLfloat?r,?GLfloat?g,?GLfloat?b,?GLfloat?a?);??
  • ??
  • //設置點大小,默認為1??
  • 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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。