当前位置:编程学习 > wap >>

[Cocos2d-x游戏引擎开发笔记]图形绘制

图形绘制的话,在cocos2d-x自带的TestCpp里有,包括绘制点,直线,多边形(填充的和没有填充的),圆,贝赛尔曲线。
 
 
 
首先在HelloWorld类中重写父类的draw方法
 
[cpp] 
virtual void draw();  
 
virtual void draw();
在源文件中将init中的类容删去,应为init方法比draw先执行,会覆盖我们画出的效果。删除之后,init方法如下
 
[cpp] 
bool HelloWorld::init()  
{  
    bool bRet = false;  
    do   
    {  
        CC_BREAK_IF(! CCLayer::init());  
        bRet = true;  
    } while (0);  
  
    return bRet;  
}  
 
bool HelloWorld::init()
{
    bool bRet = false;
    do 
    {
        CC_BREAK_IF(! CCLayer::init());
        bRet = true;
    } while (0);
 
    return bRet;
}
然后在draw方法中写如下代码:
 
[cpp]
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);  
  
}  
 
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 )//填充颜色
);
 
 
 
<
补充:移动开发 , 其他 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,