Cocos2d-x初入學堂(1)–>圖形繪製

來源:互聯網
上載者:User

歡迎轉載!轉載時請註明出處:http://blog.csdn.net/aa4790139/article/details/8103608

由於小弟本人一直和遊戲有著不解之緣,從小就特喜歡玩遊戲,然後讀大學,選專業都選了一個遊戲專業,唉~  各種貴...不過喜歡沒辦法。

然後出來是做J2ME的,然後轉android遊戲開發,尤其是有J2ME的朋友,相信都是從底層繪製開始的。在之前也用AndEngine引擎開發過兩款遊戲,除了底層繪製是用C++寫的,其他都是java寫的,然後出校以來,一直用的是java開發,所以對java比較熟悉,自然選擇用AndEngine引擎開發...由於之前都是手工繪製,所以往往在螢幕回事那款,遇到各種讓人蛋疼的事,適配的不是很好,AndEngine適配的非常好,另外一個特點,載入的記憶體很有限,所以經常記憶體溢出,不過可以採用TexturePacker來處理圖片,可以減少咋用記憶體。對於從事java開發的,初學AndEngine引擎還是挺好的。

cocos2d-x自然也將圖形繪製都封裝好了,不過對於底層的圖形繪製懂一點還是有好處的。。。廢話不多說了,以後你就會懂得...

雖然cocos2dx中內建有test,test也有裡面關於基本的圖形繪製講的也比較詳細,但是現在我要你從頭開始,繪製基本的圖形,你會嗎?

(注意:一下的名字,你都可以自己命名)

第一部分:工程的建立

第一步:建立win32的BaseDrawTest的工程

一下為我的工程目錄:

紅色來的檔案夾到cocos2d-x目錄下去copy到工程目錄下....Debug.win32你的暫時沒有,需要編譯後才會產生.

(補充:我這樣做的原因,是因為我想將win32的工程放到一個win32project目錄下,如果我們移植到android上,cocos2dx程式的產生,是在cocos2dx引擎目錄下的,為了區分所以分開存放:

1、如果你在cocos2dx引擎下建立的win32工程,那你就不需要包含下面的6個目錄了,因為利用vs產生cocos2dx工程,預設設定了這些路徑,如:

2、如果想我一樣,單獨建立cocos2d-x-win32-projects檔案夾來儲存cocos2dx的win32工程,我們只需copy去cocos2dx引擎中Box2d,cocos2dx,CocosDenshion,lib(裡面的檔案,其實就是Cocos2dx引擎下的Debug檔案夾中的lib檔案copy過來,建立的一個檔案),然後在cocos2d-x-win32-projects下利用vs建立cocos2dx的win32工程,包含如下目錄:

 

第二步:開啟BashDrawTest.sln,然後添加對應的目錄

然後右擊工程選擇屬性:

如:

選擇框出來的,VC++目錄,然後添加包含目錄、引用目錄、庫目錄...點後面的三角行,編輯,添加對應的目錄:

包含目錄和引用目錄:如檔案:

請選擇你對應的目錄包含進去,然後庫目錄,就是你BaseDrawTest目錄下的lib,之前叫你copy 到工程目錄下的..

現在好了,編譯產生,成功顯示HelloWorld,如果不顯示請查看http://blog.csdn.net/aa4790139/article/details/8086635

第二部分:圖形繪製

第一步:建立自己的情境和層

如下:我建立BaseScene情境和BaseDrawLayer層

第二步:編寫我們這四個檔案的代碼

老樣子,上傳My Code...

BaseDrawScene.h

#pragma once#include "cocos2d.h"#include "BaseDrawLayer.h"using namespace cocos2d;class BaseDrawScene :public CCScene{public:~BaseDrawScene(void);//第一種:建立方式static CCScene* scene();/*第二種:建立方式static BaseDrawScene* scene(){BaseDrawScene * scene = BaseDrawScene::create();//注意:就得重寫父類的create方法BaseDrawLayer* layer=BaseDrawLayer::create();scene->addChild(layer);return scene;}  SCENE_CREATE_FUNC(BaseDrawScene);  */};

BaseDrawScene.cpp

#include "BaseDrawScene.h"BaseDrawScene::~BaseDrawScene(){}CCScene* BaseDrawScene::scene(){CCScene * scene = CCScene::create();BaseDrawLayer* layer=BaseDrawLayer::create();scene->addChild(layer);return scene;}

BaseDrawLayer.h

#include "cocos2d.h"using namespace cocos2d;class BaseDrawLayer:public CCLayer{public:BaseDrawLayer();~BaseDrawLayer(void);virtual void draw();LAYER_CREATE_FUNC(BaseDrawLayer);};

BaseDrawLayer.cpp

#include "BaseDrawLayer.h"BaseDrawLayer::BaseDrawLayer(){}BaseDrawLayer::~BaseDrawLayer(void){}void BaseDrawLayer::draw(){//注意:注意OpenGL的座標系,起始點為左下角CCSize s=CCDirector::sharedDirector()->getWinSize();//設定點大小、顏色,然後繪製一個點glPointSize(64);glColor4f(0.0,0.0,1.0,0.5);ccDrawPoint(ccp(s.width/2+10,s.height/2));//繪製一條線,參數為起始點和終點的座標glEnable(GL_LINE_SMOOTH);ccDrawLine(ccp(0,0),ccp(s.width,s.height)); // 設定線的寬度,顏色,然後繪製一個圓    glLineWidth(2);    ccDrawColor4B(0, 255, 255, 255);//參數說明:中心點座標,半徑,角度,分段數,經過中間的線是否顯示    ccDrawCircle( ccp(s.width/2, s.height/2), 50, 0, 50, false);//繪製多邊形ccDrawColor4B(255, 255, 0, 255);    glLineWidth(10);    CCPoint vertices[] = { ccp(0,0), ccp(50,50), ccp(100,50), ccp(100,100), ccp(50,100) };    //參數說明:點集合,點數,這五個點是否構成閉合ccDrawPoly( vertices, 5, false);//繪製實心多邊形glLineWidth(1);CCPoint filledVertices[] = { ccp(0,120), ccp(50,120), ccp(50,170), ccp(25,200), ccp(0,170) };ccDrawSolidPoly(filledVertices, 5, ccc4f(0.5f, 0.5f, 1, 1 ) );//繪製三角形ccDrawColor4B(255, 0, 255, 255);    glLineWidth(2);    CCPoint vertices2[] = { ccp(30,130), ccp(30,230), ccp(50,200) };    ccDrawPoly( vertices2, 3, true);//繪製一個控制點貝瑟爾曲線//參數說明:起點、控制點、終點,分段數ccDrawQuadBezier(ccp(0,s.height), ccp(s.width/2,s.height/2), ccp(s.width,s.height), 50);//繪製兩個控制點貝瑟爾曲線ccDrawCubicBezier(ccp(s.width/2, s.height/2), ccp(s.width/2+30,s.height/2+50), ccp(s.width/2+60,s.height/2-50),ccp(s.width, s.height/2),100); //繪製填充的菱形    CCPoint vertices3[] = {ccp(60,160), ccp(70,190), ccp(100,190), ccp(90,160)};    ccDrawSolidPoly( vertices3, 4, ccc4f(1,1,0,1) );    // 恢複opengl繪製的原始值    glLineWidth(1);    ccDrawColor4B(255,255,255,255);    ccPointSize(1);}

第三步:修改AppDelegate.cpp中的applicationDidFinishLaunching()方法

CCScene *pScene =BaseDrawScene::scene();

pDirector->runWithScene(pScene);

第四步:運行..報錯缺少各種.dll庫

第五步:到Cocos2dx引擎目錄下的Debug.win32檔案夾下把下面的.dll庫都copy到你工程目錄下的Debug.win32檔案下....再運行,ok

 

繪製的效果應該就出來了....繪製過程中的資料調節測試,就有大家熟悉吧!如果講述得有誤,或者不對的地方,還望各位指出!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.