真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

cocos2dx[3.2](17)——簡單繪圖DrawNode-創(chuàng)新互聯(lián)

【嘮叨】

成都創(chuàng)新互聯(lián)公司服務(wù)項目包括沂源網(wǎng)站建設(shè)、沂源網(wǎng)站制作、沂源網(wǎng)頁制作以及沂源網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,沂源網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到沂源省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

    繪圖的方式有兩種:

    > 使用OpenGL的繪圖原語DrawPrimitives。

    > 使用DrawNode。

    曾經(jīng)在使用2.x版本的時候,學習過使用DrawPrimitives進行簡單圖形的繪制。

    OpenGL繪圖原語DrawPrimitives,詳見:http://shahdza.blog.51cto.com/2410787/1545462

    在本節(jié)中將學習使用DrawNode來進行圖形的繪制。

【致謝】

    http://blog.csdn.net/ac_huang/article/details/39522473

    http://blog.csdn.net/conmajia/article/details/8543834 (貝塞爾曲線的原理)

【小知識】

    分段數(shù)   :即繪制曲線一般都是通過繪制“樣條曲線”來實現(xiàn),而分段數(shù)即樣條段數(shù)。

  二次貝塞爾曲線 :起點終點之間的一條拋物線,利用一個控制點來控制拋物線的形狀。

  三次貝塞爾曲線 :起點終點之間,利用兩個控制點來控制曲線的形狀。

【v3.3】

    DrawNode:添加了和 DrawPrimitives 一樣的功能,同時 DrawPrimitives 標識為棄用。

    DrawPrimitives用法,參見:http://shahdza.blog.51cto.com/2410787/1545462

    對于v3.3新增的函數(shù),參見本文最后的《附錄》。函數(shù)用法將不做贅述,參見DrawPrimitives用法即可。


【DrawNode】

    DrawNode由于在一個單獨的批處理中繪制了所以元素,因此它繪制點、線段、多邊形都要比“drawing primitives”快。

  > 使用DrawPrimitives繪圖原語繪制的圖形,可以是實心的,也可以是空心的。

    > 使用DrawNode繪制的圖形都是實心的。

1、使用方法

    創(chuàng)建一個DrawNode,然后加入到Layer布景層中,即可繪制各種形狀的圖形。

    使用方法如下:

//
	//創(chuàng)建DrawNode,然后后加入到Layer層中
	DrawNode* drawNode = DrawNode::create();
	this->addChild(drawNode);
	
	//...基本圖形繪制...
//

2、基本圖形繪制

    使用DrawNode來繪制圖形,可以繪制如下幾個圖形。

    > 圓點      :drawDot

    > 線段      :drawSegment

    > 三角形     :drawTriangle

    > 多邊形     :drawPolygon

    > 二次貝塞爾圖形 :drawQuadraticBezier

    > 三次內(nèi)塞爾圖形 :drawCubicBezier

    注:繪制的圖形都是實心的。

    使用方法如下:

//
	//圓點      ('位置' , '圓點半徑' , '填充顏色')
	void drawDot(const Vec2 &pos, float radius, const Color4F &color);

	//線段          ('起點' , '終點' , '半線寬' , '填充顏色')
	void drawSegment(const Vec2 &from, const Vec2 &to, float radius, const Color4F &color);

	//三角形         ('頂點1' , '頂點2' , '頂點3' , '填充顏色')
	void drawTriangle(const Vec2 &p1, const Vec2 &p2, const Vec2 &p3, const Color4F &color);

	//多邊形        ('頂點數(shù)組' , '頂點個數(shù)' , '填充顏色' , '輪廓粗細' , '輪廓顏色')
	void drawPolygon(Vec2 *verts, int count, const Color4F &fillColor, float borderWidth, const Color4F &borderColor);

	//二次貝塞爾圖形        ('起點' , '控制點' , '終點' , '分段數(shù)' , '填充顏色')
	void drawQuadraticBezier(const Vec2& from, const Vec2& control, const Vec2& to, unsigned int segments, const Color4F &color);
	
	//三次貝塞爾圖形    ('起點' , '控制點1' , '控制點2' , '終點' , '分段數(shù)' , '填充顏色')
	void drawCubicBezier(const Vec2& from, const Vec2& control1, const Vec2& control2, const Vec2& to, unsigned int segments, const Color4F &color);

//

3、清除繪圖緩存

    使用clear(),來清除之前使用drawNode畫的所有圖形。

//
	drawNode->clear();
//

4、顏色混合方式

  使用setBlendFunc(const BlendFunc &blendFunc),設(shè)置顏色混合的方式。

    詳見:http://shahdza.blog.51cto.com/2410787/1547633

//
	BlendFunc bl = { GL_ONE, GL_ONE };
	drawNode->setBlendFunc(bl);
//

5、空心多邊形繪制

    使用DrawNode繪制的圖形都是實心的,那么空心的怎么繪制呢?

    從繪制圖形的函數(shù)可以看出:圖形繪制的同時,需要設(shè)置圖形的顏色Color4F,其中也包含了透明度的設(shè)置。所以只要控制圖形內(nèi)部的填充顏色Color4F的透明度為透明(值為0),即可繪制出一個空心的圖形來。

    而能達到這種效果的,就只有多邊形的繪制:drawPolygon。

cocos2dx[3.2](17)——簡單繪圖DrawNode

    使用舉例:

      > Color4F(1, 0, 0, 0) :紅色透明

        > Color4F(1, 0, 0, 1) :紅色不透明

//
	Vec2 point[4];
	point[0] = Vec2(100, 100);
	point[1] = Vec2(100, 200);
	point[2] = Vec2(200, 200);
	point[3] = Vec2(200, 100);
	
	//繪制空心多邊形
	//填充顏色:Color4F(1, 0, 0, 0), 透明
	//輪廓顏色:Color4F(0, 1, 0, 1), 綠色
	drawNode->drawPolygon(point, 4, Color4F(1, 0, 0, 0), 1, Color4F(0, 1, 0, 1));
//


【代碼實戰(zhàn)】

    > 圓點

    > 線段

    > 三角形

    > 實心多邊形

    > 空心多邊形

    > 二次貝塞爾圖形

    > 三次貝塞爾圖形

    > 顏色混合測試 { GL_ONE , GL_ONE}

//
	//創(chuàng)建DrawNode
	DrawNode* drawNode = DrawNode::create();
	this->addChild(drawNode);


	//圓點
	drawNode->drawDot(Vec2(50, 50), 10, Color4F::RED);


	//線段
	drawNode->drawSegment(Vec2(20, 100), Vec2(100, 100), 5, Color4F(0, 1, 0, 1));
	drawNode->drawSegment(Vec2(20, 150), Vec2(100, 150), 10, Color4F(0, 0, 1, 1));


	//三角形
	drawNode->drawTriangle(Vec2(20, 250), Vec2(100, 300), Vec2(50, 200), Color4F(1, 1, 0, 1));


	//實心多邊形
	Vec2 point1[4];
	point1[0] = Vec2(150, 50);
	point1[1] = Vec2(150, 150);
	point1[2] = Vec2(250, 150);
	point1[3] = Vec2(250, 50);
	drawNode->drawPolygon(point1, 4, Color4F(1, 0, 0, 1), 1, Color4F(0, 1, 0, 1));

	//空心多邊形
	Vec2 point2[4];
	point2[0] = Vec2(150, 200);
	point2[1] = Vec2(150, 300);
	point2[2] = Vec2(250, 300);
	point2[3] = Vec2(250, 200);
	drawNode->drawPolygon(point2, 4, Color4F(1, 0, 0, 0), 1, Color4F(0, 1, 0, 1));


	//二次貝塞爾
	Vec2 from1 = Vec2(300, 20);
	Vec2 to1 = Vec2(450, 20);
	Vec2 control = Vec2(360, 100);
	drawNode->drawQuadraticBezier(from1, control, to1, 100, Color4F::ORANGE);

	//三次貝塞爾
	Vec2 from2 = Vec2(300, 100);
	Vec2 to2 = Vec2(450, 100);
	Vec2 control1 = Vec2(350, 0);
	Vec2 control2 = Vec2(400, 200);
	drawNode->drawCubicBezier(from2, control1, control2, to2, 100, Color4F::YELLOW);


	//顏色混合測試
	BlendFunc bl = { GL_ONE, GL_ONE };
	drawNode->setBlendFunc(bl);
	
	drawNode->drawSegment(Vec2(300, 250), Vec2(450, 250), 10, Color4F::GREEN);
	drawNode->drawTriangle(Vec2(300, 200), Vec2(400, 300), Vec2(450, 150), Color4F::RED);
//

    截圖:

cocos2dx[3.2](17)——簡單繪圖DrawNode

    分析:

    (1)可以看出,繪制的圖形全部都是實心的。

    (2)繪制的線段兩邊端點是一個半圓,這是因為線段是通過圓點畫出來的。

    (3)看到中間的兩個矩形,一個是實心的,一個是空心的。

    (4)實心的貝塞爾圖形,看起來好奇怪啊。cocos2dx[3.2](17)——簡單繪圖DrawNode


【附錄】

    v3.3中添加了和 DrawPrimitives 一樣的功能,同時 DrawPrimitives 標識為棄用。

    新增函數(shù)如下:

//
	// 一個點、多個點
	// 正方形小點
	void drawPoint(const Vec2& point, const float pointSize, const Color4F &color);
	void drawPoints(const Vec2 *position, unsigned int numberOfPoints, const Color4F &color);
	void drawPoints(const Vec2 *position, unsigned int numberOfPoints, const float pointSize, const Color4F &color);

	// 線
	void drawLine(const Vec2 &origin, const Vec2 &destination, const Color4F &color);

	// 矩形、四邊形
	// Solid表示實心
	void drawRect(const Vec2 &origin, const Vec2 &destination, const Color4F &color);
	void drawRect(const Vec2 &p1, const Vec2 &p2, const Vec2 &p3, const Vec2& p4, const Color4F &color);
	void drawSolidRect(const Vec2 &origin, const Vec2 &destination, const Color4F &color);

	// 多邊形
	// Solid表示實心
	void drawPoly(const Vec2 *poli, unsigned int numberOfPoints, bool closePolygon, const Color4F &color);
	void drawSolidPoly(const Vec2 *poli, unsigned int numberOfPoints, const Color4F &color);

	// 橢圓
	// Solid表示實心
	void drawCircle(const Vec2 ¢er, float radius, float angle, unsigned int segments, bool drawLineToCenter, const Color4F &color);
	void drawCircle( const Vec2& center, float radius, float angle, unsigned int segments, bool drawLineToCenter, float scaleX, float scaleY, const Color4F &color);    
	void drawSolidCircle(const Vec2& center, float radius, float angle, unsigned int segments, const Color4F& color);
	void drawSolidCircle(const Vec2& center, float radius, float angle, unsigned int segments, float scaleX, float scaleY, const Color4F &color);

	// 樣條曲線
	void drawCardinalSpline(PointArray *config, float tension,  unsigned int segments, const Color4F &color);
	void drawCatmullRom(PointArray *points, unsigned int segments, const Color4F &color);
//

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


當前標題:cocos2dx[3.2](17)——簡單繪圖DrawNode-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://weahome.cn/article/ceehpc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部