转自:http://blog.csdn.net/zhy_cheng/article/details/8480048
图形绘制的话,在cocos2d-x自带的TestCpp里有,包括绘制点,直线,多边形(填充的和没有填充的),圆,贝赛尔曲线。
首先在HelloWorld类中重写父类的draw方法
virtual void draw();
在源文件中将init中的类容删去,应为init方法比draw先执行,会覆盖我们画出的效果。删除之后,init方法如下
bool HelloWorld::init() { bool bRet = false; do { CC_BREAK_IF(! CCLayer::init()); bRet = true; } while (0); return bRet; }
然后在draw方法中写如下代码:
void HelloWorld::draw() { CHECK_GL_ERROR_DEBUG(); /* 画一条直线,默认的宽度是1,颜色是白色,不透明,glEnable(GL_LINE_SMOOTH); 默认的情况下是后面不再设置颜色后线宽 */ glLineWidth( 1.0f ); ccDrawColor4B(255,255,255,255); ccDrawLine(ccp(0,0),ccp(480,320)); CHECK_GL_ERROR_DEBUG(); glLineWidth( 5.0f ); ccDrawColor4B(255,0,0,255); ccDrawLine(ccp(0,320), ccp(480,0)); CHECK_GL_ERROR_DEBUG(); //ccPointSize(128);这个没用啊 ccDrawColor4B(0,255,255,128); ccDrawPoint( ccp(240,200) ); CHECK_GL_ERROR_DEBUG(); // 4个点一起画 CCPoint points[] = { ccp(60,60), ccp(70,70), ccp(60,70), ccp(70,60) }; ccPointSize(4); ccDrawColor4B(0,255,255,255); ccDrawPoints( points, 4); // draw a green circle with 10 segments glLineWidth(1); ccDrawColor4B(0, 255, 0, 255); ccDrawCircle( ccp(240,160),//圆心 100,//半径 1, //如果后面设置了从圆心到圆的连线为true的话, //这个值是连线的角度,0为水平向左,逆时针 360,//将这个圆分为多少块 true//是否有从圆心到圆的连线 ); //画一个多边形 ccDrawColor4B(255, 255, 0, 255); glLineWidth(1); CCPoint vertices[] = { ccp(0,0), ccp(50,50), ccp(100,50), ccp(100,100), ccp(50,100) }; ccDrawPoly( vertices, 5, true//是否封闭 ); // 填充的多边形 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, 255, 0, 255); ccDrawCubicBezier(ccp(0,0),//开始点 ccp(50,50),//控制点 ccp(250,100),//控制点 ccp(300,300),//目标点 100//分成多少段得到的曲线 ); // 还原默认值 glLineWidth(1); ccDrawColor4B(255,255,255,255); ccPointSize(1); }