Cocos2d-X直接使用OpenGL接口
来源:互联网 发布:centos ftp开启文件夹 编辑:程序博客网 时间:2024/06/03 06:27
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
#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;}
- Cocos2d-X直接使用OpenGL接口
- Cocos2d-x OpenGL 使用
- cocos2d-x使用OpenGL获取屏幕截图
- Cocos2d-x opengl 画图
- cocos2d-x openGL坐标系
- 在Cocos2d-x 3.0中使用opengl shader
- 【玩转cocos2d-x之四十】如何在Cocos2d-x 3.0中使用opengl shader?
- 【玩转cocos2d-x之四十】如何在Cocos2d-x 3.0中使用opengl shader?
- cocos2d-x之OpenGL概述
- cocos2d-x之OpenGL概述
- 从Cocos2d-x学习OpenGL -- Cocos2d-x渲染结构
- cocos2d-x 直接读取多张图创建动画
- cocos2d-x 的opengl坐标体系
- cocos2d-x OpenGL Shader 图片特效处理
- cocos2d-x OpenGL ES 坐标系总结
- Cocos2D-X shader(二) OpenGL渲染管线
- cocos2d-x shader(2) openGL初探
- Cocos2d-x与OpenGL底层的感想
- APK混淆打包
- exadata oracle ssh登陆不了和su oracle 报incorrect password 解决办法
- Android_BaseAdapter基础延伸_141026
- IOCP 第二篇
- [leetcode] wordBreak II
- Cocos2d-X直接使用OpenGL接口
- 粒子编辑器
- ios 实现app语言切换,不跟随系统
- 360诉腾讯垄断案今宣判:“3Q大战”互诉料将画句号
- Android Volley完全解析(一),初识Volley的基本用法
- 5奇数魔方阵
- Xmind2013激活
- 正则表达式-1.原理理解
- Android Volley完全解析(二),使用Volley加载网络图片