首页 > 代码库 > Cocos2d-X直接使用OpenGL接口
Cocos2d-X直接使用OpenGL接口
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); }
执行结果:
Cocos2d-X直接使用OpenGL接口
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。