好的,今天我们来学习一下贝塞尔曲线,上次我们忘记总结了,放了两天假,又被我忘得差不多了,哎!学了马上就忘,忘了又回头重来。这毛病总这样。。。。
貌似我记得好像是要重写draw函数,在里面写画图操作就可以了吧!呃,应该是这样
还有几个常用的函数:
glLineWidth() 设置线的大小
ccDrawColor4B() 设置线的颜色
ccPointSize() 设置点的大小
上一节我们好像还遇到一个问题,就是画一个点,设置半透明的时候我们用ccDrawColor4F 貌似没效果
所以我们采用的ccDrawColor4B()
记得还原画笔哦
glLineWidth(1);
ccDrawColor4B(255,255,255,255);
ccPointSize(1);
ok,我们开始这次的学习
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
class HelloWorld : public cocos2d::CCLayer
{
public:
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init();
// there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::CCScene* scene();
virtual void draw();
// implement the "static node()" method manually
CREATE_FUNC(HelloWorld);
};
#endif // __HELLOWORLD_SCENE_H__
#include "HelloWorldScene.h"
USING_NS_CC;
CCScene* HelloWorld::scene()
{
// 'scene' is an autorelease object
CCScene *scene = CCScene::create();
// 'layer' is an autorelease object
HelloWorld *layer = HelloWorld::create();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
//
// 1. super init first
if ( !CCLayer::init() )
{
return false;
}
return true;
}
void HelloWorld::draw()
{
}
呃!我们首先来画个简单点的贝塞尔曲线,
void HelloWorld::draw()
{
CCSize visibleSize= CCDirector::sharedDirector()->getVisibleSize();
ccDrawColor4B(255,0,0,255);
//绘制一个控制点的贝塞尔曲线
//参数1:绘制的起点
//参数2:控制点
//参数3:绘制的终点
//参数4:段,就像绘制圆一样的,段越大越平滑
ccDrawQuadBezier(ccp(0,visibleSize.height),ccp(visibleSize.width/2,visibleSize.height/2),ccp(visibleSize.width,visibleSize.height),100);
//还原画笔
glLineWidth(1);
ccDrawColor4B(255,255,255,255);
ccPointSize(1);
}
呃,我刚才想着要介绍什么来着...一时间走起了 哎哟 我去......
对,控制点,我们很迷茫,控制点是个什么东西呢?
这就是一个控制点的贝塞尔曲线图
p0 起点
p1 控制点
p2 终点
好了,理解了之后我们来绘制有两个控制点的贝塞尔曲线
void HelloWorld::draw()
{
CCSize visibleSize= CCDirector::sharedDirector()->getVisibleSize();
ccDrawColor4B(255,0,0,255);
//绘制一个控制点的贝塞尔曲线
//参数1:绘制的起点
//参数2:控制点
//参数3:绘制的终点
//参数4:段,就像绘制圆一样的,段越大越平滑
//ccDrawQuadBezier(ccp(0,visibleSize.height),ccp(visibleSize.width/2,visibleSize.height/2),ccp(visibleSize.width,visibleSize.height),100);
//绘制一个控制点的贝塞尔曲线
//参数1:绘制的起点
//参数2:控制点1
//参数3:控制点2
//参数4:绘制的终点
//参数5:段,就像绘制圆一样的,段越大越平滑
ccDrawCubicBezier(ccp(0,visibleSize.height/2),ccp(visibleSize.width+50,visibleSize.height/2+150),ccp(visibleSize.width/2+100,visibleSize.height/2-150),ccp(visibleSize.width,visibleSize.height/2),500);
//还原画笔
glLineWidth(1);
ccDrawColor4B(255,255,255,255);
ccPointSize(1);
}
有两个控制点的贝塞尔曲线图如下
总之这些个控制点什么什么的,靠心是把握不了的,貌似PS中有可以掩饰的
总结一下:
如何修改线的颜色 CCDrawColor4B
修改线宽 glLineWidth
修改点大小 ccPointSize
至于画什么东东, CCDraw然后又自动提示的,看看方法名就清楚了