Cocos2d-X直接使用OpenGL介面,cocos2d-xopengl

來源:互聯網
上載者:User

Cocos2d-X直接使用OpenGL介面,cocos2d-xopengl

Cocos2d-X是基於基於OpenGL ES的2D遊戲引擎,所以Cocos2d-X可以直接使用OpenGL介面

首先建立一個Draw類,用於處理OpenGL介面

在Draw.h中添加下面的代碼

#ifndef _Draw_H_#define _Draw_H_#include "cocos2d.h"USING_NS_CC;class Draw : public CCLayer{public:    static CCScene* scene();    CREATE_FUNC(Draw);    bool init();    void draw();};#endif


執行個體1:使用OpenGL介面畫一個點

在Draw.cpp中添加下面的代碼

#include "Draw.h"CCScene* Draw::scene(){    CCScene* s = CCScene::create();    Draw* layer = Draw::create();    s->addChild(layer);    return s;}bool Draw::init(){    CCLayer::init();    return true;}void Draw::draw(){    //得到視窗的大小    CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //設定座標    CCPoint center = ccp(winSize.width / 2, winSize.height / 2);    //點:預設一個像素大小,白色    //ccPointSize設定點的大小    ccPointSize(25);    //ccDrawColor4B設定點的顏色    ccDrawColor4B(255, 0, 0, 255);    //設定點的位置    ccDrawPoint(center);}

執行結果:


執行個體2:使用OpenGL介面畫一條線

在Draw.cpp中添加下面的代碼

#include "Draw.h"CCScene* Draw::scene(){    CCScene* s = CCScene::create();    Draw* layer = Draw::create();    s->addChild(layer);    return s;}bool Draw::init(){    CCLayer::init();    return true;}void Draw::draw(){    //得到視窗的大小    CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //設定座標    CCPoint center = ccp(winSize.width / 2, winSize.height / 2);     /*center.x = winSize.width / 2     center.y = winSize.height / 2*/    // 線:預設是一個像素寬度,白色    //ccDrawColor4B設定顏色    ccDrawColor4B(255, 255, 0, 255);       //glLineWidth是設定線條寬度的函數    glLineWidth(5);    ccDrawLine(center,//起始點的位置         ccpAdd(center, ccp(100, 100))//中點的位置        );       /*       ccpAdd(center, ccp(100, 100))       表示:center.x + 100, center.y + 100       */}


執行結果:


執行個體3:使用OpenGL介面畫多個點

在Draw.cpp中添加下面的代碼

#include "Draw.h"CCScene* Draw::scene(){    CCScene* s = CCScene::create();    Draw* layer = Draw::create();    s->addChild(layer);    return s;}bool Draw::init(){    CCLayer::init();    return true;}void Draw::draw(){    //得到視窗的大小    CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //設定座標    CCPoint center = ccp(winSize.width / 2, winSize.height / 2);     /*center.x = winSize.width / 2     center.y = winSize.height / 2*/    //設定點的顏色ccDrawColor4B(255, 0, 0, 255);    //定義一個數組儲存點的位置    CCPoint pts[] = {         CCPoint(100, 100),         CCPoint(100, 200),         CCPoint(200, 200),         CCPoint(200, 100)     };    //畫點    ccDrawPoints(pts, 4);}

執行結果:


執行個體4:使用OpenGL介面畫一個有圓心連線的圓

在Draw.cpp中添加下面的代碼

#include "Draw.h"CCScene* Draw::scene(){    CCScene* s = CCScene::create();    Draw* layer = Draw::create();    s->addChild(layer);    return s;}bool Draw::init(){    CCLayer::init();    return true;}void Draw::draw(){    //得到視窗的大小    CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //設定座標    CCPoint center = ccp(winSize.width / 2, winSize.height / 2);     /*center.x = winSize.width / 2     center.y = winSize.height / 2*/    //設定圓圈的顏色ccDrawColor4B(192, 192, 0, 255);      /*畫圓圈  參數1:圓心      參數2:半徑      參數3:初始化時旋轉的弧度(3.14=180度)      參數4:線段數,      參數5:是否要圓心連線      */ccDrawCircle(center, 100, 1.57, 200, true);}

執行結果:


執行個體5:使用OpenGL介面畫一個沒有圓心連線的圓

在Draw.cpp中添加下面的代碼

#include "Draw.h"CCScene* Draw::scene(){    CCScene* s = CCScene::create();    Draw* layer = Draw::create();    s->addChild(layer);    return s;}bool Draw::init(){    CCLayer::init();    return true;}void Draw::draw(){    //得到視窗的大小    CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //設定座標    CCPoint center = ccp(winSize.width / 2, winSize.height / 2);     /*center.x = winSize.width / 2     center.y = winSize.height / 2*/    //設定圓圈的顏色ccDrawColor4B(192, 192, 0, 255);      /*畫圓圈  參數1:圓心      參數2:半徑      參數3:初始化時旋轉的弧度(3.14=180度)      參數4:線段數,      參數5:是否要圓心連線      */ccDrawCircle(center, 100, 1.57, 200, false);}


執行結果:


執行個體6:使用OpenGL介面畫一個封口的多邊形

在Draw.cpp中添加下面的代碼

#include "Draw.h"CCScene* Draw::scene(){    CCScene* s = CCScene::create();    Draw* layer = Draw::create();    s->addChild(layer);    return s;}bool Draw::init(){    CCLayer::init();    return true;}void Draw::draw(){    //得到視窗的大小    CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //設定座標    CCPoint center = ccp(winSize.width / 2, winSize.height / 2);     /*center.x = winSize.width / 2     center.y = winSize.height / 2*/    //設定點的顏色ccDrawColor4B(192, 192, 0, 255);    //定義一個數組儲存點的位置    CCPoint pts[] = {         CCPoint(100, 100),         CCPoint(100, 200),         CCPoint(200, 200),         CCPoint(200, 100),        CCPoint(150, 50)    };    // 畫封口的多邊形ccDrawPoly(pts, 5, true);}

執行結果:


執行個體7:使用OpenGL介面畫一個不封口的多邊形

在Draw.cpp中添加下面的代碼

#include "Draw.h"CCScene* Draw::scene(){    CCScene* s = CCScene::create();    Draw* layer = Draw::create();    s->addChild(layer);    return s;}bool Draw::init(){    CCLayer::init();    return true;}void Draw::draw(){    //得到視窗的大小    CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //設定座標    CCPoint center = ccp(winSize.width / 2, winSize.height / 2);     /*center.x = winSize.width / 2     center.y = winSize.height / 2*/    //設定點的顏色ccDrawColor4B(192, 192, 0, 255);    //定義一個數組儲存點的位置    CCPoint pts[] = {         CCPoint(100, 100),         CCPoint(100, 200),         CCPoint(200, 200),         CCPoint(200, 100),        CCPoint(150, 50)    };    // 畫封口的多邊形ccDrawPoly(pts, 5, false);}

執行結果:


執行個體8:使用OpenGL介面畫一個實心多邊形

在Draw.cpp中添加下面的代碼

#include "Draw.h"CCScene* Draw::scene(){    CCScene* s = CCScene::create();    Draw* layer = Draw::create();    s->addChild(layer);    return s;}bool Draw::init(){    CCLayer::init();    return true;}void Draw::draw(){    //得到視窗的大小    CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //設定座標    CCPoint center = ccp(winSize.width / 2, winSize.height / 2);     /*center.x = winSize.width / 2     center.y = winSize.height / 2*/    //設定點的顏色ccDrawColor4B(192, 192, 0, 255);       //定義數組儲存點的位置CCPoint pts2[] = {        CCPoint(300, 100),         CCPoint(400, 200),         CCPoint(400, 300)    };    //畫實心多邊形    ccDrawSolidPoly(pts2, 3, ccc4f(1, 0, 0, 1));}

執行結果:


執行個體9:使用OpenGL介面實現Bezier曲線

在Draw.cpp中添加下面的代碼

#include "Draw.h"CCScene* Draw::scene(){    CCScene* s = CCScene::create();    Draw* layer = Draw::create();    s->addChild(layer);    return s;}bool Draw::init(){    CCLayer::init();    return true;}void Draw::draw(){    //得到視窗的大小    CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //設定座標    CCPoint center = ccp(winSize.width / 2, winSize.height / 2);     /*center.x = winSize.width / 2     center.y = winSize.height / 2*/    //設定點的顏色ccDrawColor4B(192, 192, 0, 255);      //定義數組儲存點的位置CCPoint pts2[] = {        CCPoint(300, 100),         CCPoint(400, 200),         CCPoint(400, 300)    };    //Bezier曲線//二階Bezier曲線ccDrawQuadBezier(pts2[0], pts2[1], pts2[2], 10);}


執行結果:



執行個體10:使用OpenGL介面實現二階Bezier曲線

在Draw.cpp中添加下面的代碼

#include "Draw.h"CCScene* Draw::scene(){    CCScene* s = CCScene::create();    Draw* layer = Draw::create();    s->addChild(layer);    return s;}bool Draw::init(){    CCLayer::init();    return true;}void Draw::draw(){    //得到視窗的大小    CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //設定座標    CCPoint center = ccp(winSize.width / 2, winSize.height / 2);     /*center.x = winSize.width / 2     center.y = winSize.height / 2*/    //定義數組儲存點的位置    CCPoint pts[] = {         CCPoint(100, 100),         CCPoint(100, 200),         CCPoint(200, 200),         CCPoint(200, 100)    };    //定義數組儲存點的位置CCPoint pts2[] = {        CCPoint(300, 100),         CCPoint(400, 200),         CCPoint(400, 300)    };   // Bezier曲線// 二階Bezier曲線ccDrawQuadBezier(pts2[0], pts2[1], pts2[2], 10);ccDrawColor4B(90, 90, 255, 255);ccDrawCubicBezier(pts[0], pts[1], pts2[2], pts[3], 10);}

執行結果:




執行個體11:使用OpenGL介面實現通過滑鼠點擊畫多邊形

首先建立一個ActiveDraw類,用於處理OpenGL介面

在ActiveDraw.h中添加下面的代碼

#ifndef __ActiveDraw_H__#define __ActiveDraw_H__#include "cocos2d.h"USING_NS_CC;class ActiveDraw : public CCLayer{public:static CCScene* scene();    CREATE_FUNC(ActiveDraw);    bool init();    //設定觸摸事件bool ccTouchBegan(CCTouch*, CCEvent*);    //儲存觸摸點CCPoint _pts[100];    //記錄有效觸摸點    int _ptsCount;void draw();};#endif


在ActiveDraw.cpp中添加下面的代碼

#include "ActiveDraw.h"CCScene* ActiveDraw::scene(){CCScene* s = CCScene::create();    s->addChild(ActiveDraw::create());    return s;}bool ActiveDraw::init(){CCLayer::init();    //處理觸摸事件setTouchEnabled(true);setTouchMode(kCCTouchesOneByOne);_ptsCount = 0;return true;}bool ActiveDraw::ccTouchBegan(CCTouch* touch, CCEvent* ev){//得到觸摸點的座標CCPoint pt = touch->getLocation(); // save //將座標儲存到數組中_pts[_ptsCount++] = pt;return true;}void ActiveDraw::draw(){    //得到視窗的大小CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //設定點的位置    CCPoint center = ccp(winSize.width / 2, winSize.height / 2);//畫多邊形ccDrawPoly(_pts, _ptsCount, true);}


執行結果:


執行個體11:使用OpenGL介面實現通過滑鼠點擊畫多邊形2.0

首先建立一個ActiveDraw類,用於處理OpenGL介面

在ActiveDraw.h中添加下面的代碼

#ifndef __ActiveDraw_H__#define __ActiveDraw_H__#include "cocos2d.h"USING_NS_CC;class ActiveDraw : public CCLayer{public:static CCScene* scene();    CREATE_FUNC(ActiveDraw);    bool init();    //設定觸摸事件bool ccTouchBegan(CCTouch*, CCEvent*);    //儲存觸摸點CCPoint _pts[100];    //記錄有效觸摸點    int _ptsCount;    //定義精靈CCSprite* _sprite;void draw();};#endif

在ActiveDraw.cpp中添加下面的代碼

#include "ActiveDraw.h"CCScene* ActiveDraw::scene(){CCScene* s = CCScene::create();    s->addChild(ActiveDraw::create());    return s;}bool ActiveDraw::init(){CCLayer::init();    //處理觸摸事件setTouchEnabled(true);setTouchMode(kCCTouchesOneByOne);_ptsCount = 0;    //建立精靈_sprite = CCSprite::create();   addChild(_sprite);return true;}bool ActiveDraw::ccTouchBegan(CCTouch* touch, CCEvent* ev){    //得到觸摸點的座標CCPoint pt = touch->getLocation();_pts[_ptsCount++] = pt;    //得到視窗的大小    CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //設定精靈的位置(精靈的位置為隨機位置)    _sprite->setPosition(ccp(winSize.width*CCRANDOM_0_1(), winSize.height*CCRANDOM_0_1()));return true;}void ActiveDraw::draw(){    //得到視窗的大小CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //設定點的位置    CCPoint center = ccp(winSize.width / 2, winSize.height / 2);    //畫多邊形ccDrawPoly(_pts, _ptsCount, true);if(_sprite)    {        //畫圓形        ccDrawCircle(_sprite->getPosition(), 20, 0, 100, true);    }}

執行結果:




執行個體12:使用OpenGL介面實現畫線段

首先建立一個DrawNode類,用於處理OpenGL介面

在DrawNode.h中添加下面的代碼

#ifndef _DrawNode_H_#define _DrawNode_H_#include "cocos2d.h"USING_NS_CC;class DrawNode : public CCLayer{public:    static CCScene* scene();    CREATE_FUNC(DrawNode);    bool init();};#endif

在DrawNode.cpp中添加下面的代碼
#include "DrawNode.h"CCScene* DrawNode::scene(){    CCScene* s = CCScene::create();    DrawNode* layer = DrawNode::create();    s->addChild(layer);    return s;}bool DrawNode::init(){    //初始化父類    CCLayer::init();    //建立DrawNode    CCDrawNode* node = CCDrawNode::create();     //得到視窗的大小    CCSize winSize = CCDirector::sharedDirector()->getWinSize();        //設定點的座標    CCPoint center = ccp(winSize.width / 2, winSize.height / 2);    //設定node的位置    node->setPosition(center);    //畫一條線段    node->drawSegment(ccp(0, 0), ccp(100, 100), 2, ccc4f(1, 0, 0, 1));    //添加node    addChild(node);    return true;}


執行結果:
OpenGL ES與cocos2d-x 對android開發的作用

opengl 比較基礎,cocos2d比較專業,但是功能也不全面。不學遊戲沒必要,android很多東西都需要學。
 
不可以build cocos2d-x【對於opengl版本】

強烈建議你換個機器試試,借朋友的獨立顯卡的機器再式。
我在GM45集顯的迷你筆記型電腦上,遇到過保衛蘿蔔PC版因顯卡不支援無法啟動並執行情況。

但我自己使用的是獨顯本工作,還真沒在集顯的本子上測試過開發平台。所以。。。。

到單位,到學校,找同事,找同學,請吃飯,借本子,裝下開發環境又不會少塊肉,呵呵
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.