Cocos2d-x 图形绘制

转自:http://blog.csdn.net/zhy_cheng/article/details/8480048

 

图形绘制的话,在cocos2d-x自带的TestCpp里有,包括绘制点,直线,多边形(填充的和没有填充的),圆,贝赛尔曲线。

首先在HelloWorld类中重写父类的draw方法

  1. virtual void draw();
virtual void draw();


在源文件中将init中的类容删去,应为init方法比draw先执行,会覆盖我们画出的效果。删除之后,init方法如下

  1. bool HelloWorld::init()
  2. {
  3. bool bRet = false;
  4. do
  5. {
  6. CC_BREAK_IF(! CCLayer::init());
  7. bRet = true;
  8. } while (0);
  9. return bRet;
  10. }
bool HelloWorld::init()
{
    bool bRet = false;
    do 
    {
        CC_BREAK_IF(! CCLayer::init());
        bRet = true;
    } while (0);

    return bRet;
}


然后在draw方法中写如下代码:

  1. void HelloWorld::draw()
  2. {
  3. CHECK_GL_ERROR_DEBUG();
  4. /*
  5. 画一条直线,默认的宽度是1,颜色是白色,不透明,glEnable(GL_LINE_SMOOTH);
  6. 默认的情况下是后面不再设置颜色后线宽
  7. */
  8. glLineWidth( 1.0f );
  9. ccDrawColor4B(255,255,255,255);
  10. ccDrawLine(ccp(0,0),ccp(480,320));
  11. CHECK_GL_ERROR_DEBUG();
  12. glLineWidth( 5.0f );
  13. ccDrawColor4B(255,0,0,255);
  14. ccDrawLine(ccp(0,320), ccp(480,0));
  15. CHECK_GL_ERROR_DEBUG();
  16. //ccPointSize(128);这个没用啊
  17. ccDrawColor4B(0,255,255,128);
  18. ccDrawPoint( ccp(240,200) );
  19. CHECK_GL_ERROR_DEBUG();
  20. // 4个点一起画
  21. CCPoint points[] = { ccp(60,60), ccp(70,70), ccp(60,70), ccp(70,60) };
  22. ccPointSize(4);
  23. ccDrawColor4B(0,255,255,255);
  24. ccDrawPoints( points, 4);
  25. // draw a green circle with 10 segments
  26. glLineWidth(1);
  27. ccDrawColor4B(0, 255, 0, 255);
  28. ccDrawCircle( ccp(240,160),//圆心
  29. 100,//半径
  30. 1, //如果后面设置了从圆心到圆的连线为true的话,
  31. //这个值是连线的角度,0为水平向左,逆时针
  32. 360,//将这个圆分为多少块
  33. true//是否有从圆心到圆的连线
  34. );
  35. //画一个多边形
  36. ccDrawColor4B(255, 255, 0, 255);
  37. glLineWidth(1);
  38. CCPoint vertices[] = { ccp(0,0), ccp(50,50), ccp(100,50), ccp(100,100), ccp(50,100) };
  39. ccDrawPoly( vertices, 5, true//是否封闭
  40. );
  41. // 填充的多边形
  42. glLineWidth(1);
  43. CCPoint filledVertices[] = { ccp(0,120), ccp(50,120), ccp(50,170), ccp(25,200), ccp(0,170) };
  44. ccDrawSolidPoly(filledVertices, 5, ccc4f(0.5f, 0.5f, 1, 1 )//填充颜色
  45. );
  46. //贝塞尔曲线
  47. ccDrawColor4B(255, 255, 0, 255);
  48. ccDrawCubicBezier(ccp(0,0),//开始点
  49. ccp(50,50),//控制点
  50. ccp(250,100),//控制点
  51. ccp(300,300),//目标点
  52. 100//分成多少段得到的曲线
  53. );
  54. // 还原默认值
  55. glLineWidth(1);
  56. ccDrawColor4B(255,255,255,255);
  57. ccPointSize(1);
  58. }
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);

}


在代码中的注释解释的很清楚,下面来一张效果图:

源代码的话,那就没有必要上传了,代码我都贴出来了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值