【cocos2dx 3.x】画线
转载自:http://www.cnblogs.com/Richard-Core/p/3836100.html
关于cocos2d-x 3.2 版本的绘图方法有两种
1、使用DrawNode类绘制自定义图形。
2、继承Layer类重写draw()方法。
以上两种方法都可以绘制自定义图形,根据自己的需要选择合适的方法。
一、使用DrawNode类绘制自定义图形
使用DrawNode 类绘制图形是最简单的方法,create一个DrawNode类,然后添加进场景。然后就可以愉快的绘图了。
1 auto s = Director::getInstance()->getWinSize(); 2 //创建 3 auto draw = DrawNode::create(); 4 this->addChild(draw, 10); 5 6 // 画圆 7 for( int i=0; i < 10; i++) 8 { 9 draw->drawDot(Vec2(s.width/2, s.height/2), 10*(10-i), Color4F(CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1(), 1)); 10 } 11 12 // 画多边形 13 Vec2 points[] = { Vec2(s.height/4,0), Vec2(s.width,s.height/5), Vec2(s.width/3*2,s.height) }; 14 draw->drawPolygon(points, sizeof(points)/sizeof(points[0]), Color4F(1,0,0,0.5), 4, Color4F(0,0,1,1)); 15 16 // 画线 17 draw->drawSegment(Vec2(20,s.height), Vec2(20,s.height/2), 10, Color4F(0, 1, 0, 1)); 18 19 draw->drawSegment(Vec2(10,s.height/2), Vec2(s.width/2, s.height/2), 40, Color4F(1, 0, 1, 0.5)); 20 21 // 画三角形 22 draw->drawTriangle(Vec2(10, 10), Vec2(70, 30), Vec2(100, 140), Color4F(CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1(), 0.5)); 23 24 // 画贝赛尔曲线 25 draw->drawQuadraticBezier(Vec2(s.width - 150, s.height - 150), Vec2(s.width - 70, s.height - 10), Vec2(s.width - 10, s.height - 10), 10, Color4F(CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1(), 0.5)); 26 27 draw->drawCubicBezier(Vec2(s.width - 250, 40), Vec2(s.width - 70, 100), Vec2(s.width - 30, 250), Vec2(s.width - 10, s.height - 50), 10, Color4F(CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1(), 0.5));
根据需要可以用这些api创造出自己需要的图像。
二、继承Layer类重写draw()方法
这种方式可以自定义一个绘图类,用于创作自己需要的图形。
#ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" USING_NS_CC;class HelloWorld : public cocos2d::Layer { public:virtual void draw(Renderer *renderer, const Mat4 &transform, bool transformUpdated) override; protected: void onDraw(const kmMat4 &transform, bool transformUpdated); CustomCommand _customCommand; }; #endif
#include "HelloWorldScene.h" #include "VisibleRect.h"void HelloWorld::draw(cocos2d::Renderer *renderer, const kmMat4 &transform, bool transformUpdated) { _customCommand.init(1); _customCommand.func = CC_CALLBACK_0(HelloWorld::onDraw, this,transform,transformUpdated); renderer->addCommand(&_customCommand); }void HelloWorld::onDraw(const kmMat4 &transform, bool transformUpdated) { kmGLPushMatrix(); kmGLLoadMatrix(&transform); /*直线*/ CHECK_GL_ERROR_DEBUG(); DrawPrimitives::drawLine(VisibleRect::leftBottom(), VisibleRect::rightTop()); CHECK_GL_ERROR_DEBUG(); glLineWidth( 5.0f ); DrawPrimitives::setDrawColor4B(255,0,0,255); DrawPrimitives::drawLine( Point(0, 0), Point(100, 100) ); // draw big point in the center DrawPrimitives::setPointSize(64); DrawPrimitives::setDrawColor4B(100, 0, 255, 128); DrawPrimitives::drawPoint(VisibleRect::center()); CHECK_GL_ERROR_DEBUG(); // draw 4 small points Point points[] = { Point(60,60), Point(70,70), Point(160,70), Point(170,60) }; DrawPrimitives::setPointSize(10); DrawPrimitives::setDrawColor4B(0,10,255,255); DrawPrimitives::drawPoints( points, 4); CHECK_GL_ERROR_DEBUG(); // draw a green circle with 10 segments glLineWidth(16); DrawPrimitives::setDrawColor4B(0, 255, 0, 255); DrawPrimitives::drawCircle( VisibleRect::center(), 100, 0, 10, false); CHECK_GL_ERROR_DEBUG(); // draw a green circle with 50 segments with line to center glLineWidth(2); DrawPrimitives::setDrawColor4B(0, 255, 255, 255); DrawPrimitives::drawCircle( VisibleRect::center(), 150, CC_DEGREES_TO_RADIANS(90), 50, false); CHECK_GL_ERROR_DEBUG(); // draw a pink solid circle with 50 segments glLineWidth(2); DrawPrimitives::setDrawColor4B(255, 0, 255, 255); DrawPrimitives::drawSolidCircle( VisibleRect::center() + Point(140,0), 40, CC_DEGREES_TO_RADIANS(90), 50, 1.0f, 1.0f); CHECK_GL_ERROR_DEBUG(); // open yellow poly DrawPrimitives::setDrawColor4B(255, 255, 0, 255); glLineWidth(5); Point vertices[] = { Point(10,10), Point(50,50), Point(100,50), Point(150,100), Point(200,150) }; DrawPrimitives::drawPoly( vertices, 5, false); CHECK_GL_ERROR_DEBUG(); // filled poly glLineWidth(1); Point filledVertices[] = { Point(0,120), Point(50,120), Point(50,170), Point(25,200), Point(0,170) }; DrawPrimitives::drawSolidPoly(filledVertices, 5, Color4F(0.5f, 0.5f, 1, 1 ) ); // closed purble poly DrawPrimitives::setDrawColor4B(255, 0, 255, 255); glLineWidth(2); Point vertices2[] = { Point(30,130), Point(30,230), Point(50,200) }; DrawPrimitives::drawPoly( vertices2, 3, true); CHECK_GL_ERROR_DEBUG(); // draw quad bezier path DrawPrimitives::drawQuadBezier(VisibleRect::leftTop(), VisibleRect::center(), VisibleRect::rightTop(), 50); CHECK_GL_ERROR_DEBUG(); // draw cubic bezier path DrawPrimitives::drawCubicBezier(VisibleRect::center(), Point(VisibleRect::center().x+30,VisibleRect::center().y+150), Point(VisibleRect::center().x+60,VisibleRect::center().y-300),Point(VisibleRect::center().x+90,VisibleRect::center().y+150),100); CHECK_GL_ERROR_DEBUG(); //draw a solid polygon Point vertices3[] = {Point(60,160), Point(70,190), Point(100,190), Point(90,160)}; DrawPrimitives::drawSolidPoly( vertices3, 4, Color4F(1,1,0,1) ); CHECK_GL_ERROR_DEBUG(); //end draw kmGLPopMatrix(); }
其中涉及到辅助类VisibleRect类得到获取视口。
【cocos2dx 3.x】画线相关推荐
- cocos2d-x3.6 连连看连通画线
我的博客:http://blog.csdn.net/dawn_moon 网上看到非常多人写的连连看,都没有画连线的实现.事实上要话连线挺简单的.cocos2d-x 提供了一个非常方便的绘图形的类.Dr ...
- cocos2d-x3.x实现屏幕画线并添加刚体属性
为了方便理解,本文分为如下两部分: 实现屏幕画线 为线段添加刚体属性 实现屏幕画线 效果预览 涉及内容 触摸机制 线段绘制方法 创建 PhysicWorld 类 在头文件**PhysicWorld.h ...
- 百度地图轨迹回放,自定义路书,边走边画线
转自:https://www.cnblogs.com/syj2016/p/5685294.html 百度地图轨迹回放,自定义路书,边走边画线 在原有的百度路书的基础上,做了修改,使其能实现边走边画线的 ...
- JAVA实现中点画线_实验1-中点画线和Bresenham画线算法的实现
<实验1-中点画线和Bresenham画线算法的实现>由会员分享,可在线阅读,更多相关<实验1-中点画线和Bresenham画线算法的实现(9页珍藏版)>请在人人文库网上搜索. ...
- 18怎么确定板子形状_板绘怎么画线条排线?板绘小白画线不稳怎么办?
想学习绘画去找不到方法?小编为大家提供一套学习素材~~领取方式在文章最后~~ 很多初学者在刚刚接触板绘的时候经常会因为手不稳而无法控制线条的运用,导致画面显得粗糙,形状或结构不标准,画面花等等问题. ...
- 毛边效果 html,Html5 Canvas画线有毛边解决方法
例外参考:http://jo2.org/html5-canvas%E7%94%BB%E5%9B%BE3%EF%BC%9A1px%E7%BA%BF%E6%9D%A1%E6%A8%A1%E7%B3%8A% ...
- OpenCV在图像上画线、矩形、椭圆、多边形、填充的多边形、圆、显示文字
OpenCV在图像上随机画直线.椭圆.多边形.圆.显示文字 代码如下: /*** @file Drawing_2.cpp* @brief Simple sample code*/#include &l ...
- Bresenham 算法画线 画圆
最近作业在做 graphics driver 涉及到 Bresenham 画线以及画圆算法,以防自己忘记了总结一些知识点以及源码. 所有代码的输入参数类型都是 unsinged int Bresenh ...
- Matlab画线实例图
1 plot画线 直线: 设置线宽和颜色: 黄色,8像素宽: 直线,黄色: 2 line 画线 画的是坐标(1,3)到(2,4)的一条线: 设置线型和颜色: 3 数学曲线 另一个:
最新文章
- java 开源sns_JEESNS V1.0发布,JAVA 开源 SNS 社交系统
- feign调用如何传递token_走进Spring Cloud之五 eureka Feign(服务调用者)
- 【必读】2019年深度学习自然语言处理最新十大发展趋势, 附报告下载
- java单链表例子_写一个java链表的例子?随便举例说一下。
- mysql求女生人数_在读女硕士110多万!为什么越来越多的女生选择考研?
- 查询没有走索引_关于MySQL种的in函数到底走不走索引、我和同事差点大打出手!...
- Pandas MultiIndex(多重索引)
- 年中618会声会影好礼送不停!
- 强行结束进程命令ntsd
- 求高手请进,帮我分析这种情况是什么原因
- VBlog 静态页面 动态博客
- 被互联网婚恋榨干的你,还会相信爱情吗?
- 从高排到低变成小楼梯儿歌_新学期50首幼儿园常规儿歌,收藏了就能用上!
- sklearn模块之朴素贝叶斯:(二)伯努利模型的实现
- core dumped调试Segmentation fault
- Fragstats计算景观格局指数不出结果和分维数PAFRAC出现N/A的问题
- 穿行测试工作底稿 软件行业,CPA审计预习书(第5话)——风险评估工作底稿之了解被审计单位的内部控制、穿行测试和控制测试...
- Linux查看和结束进程命令详解
- Github高星项目!用Python开发的一个网易云音乐
- Rockchip开发系列 - 4.2.Uart问题汇总
热门文章
- Proteus:单片机动态数码管显示“HELLO”模拟
- python随机密码生成10个8位密码_生成8位随机密码脚本
- 史上最全因果推断合集-14(因果分析在贝壳的探索实践)
- Terrain方案比较
- HX=JE,HX-JE芯片无感升压ic
- JAVA设计模式是个什么玩意儿_01_工厂方法模式
- 威纶触摸屏485直接控制监控台达vfd-m变频器方式
- 乌海计算机打印准考证,2016年下半年乌海计算机一级准考证打印入口及网址,计算机等级考试时间查询...
- spring boot 集成sleuth
- java 线程的基本概念_Java多线程——基本概念