cocos2d-x 画笔实现

#include "drawPaint.h"

int drawPaint::_penBold = 3;
bool drawPaint::_isTouchDraw = false;
CCScene * drawPaint::scene()
{
	CCScene * s = CCScene::create();
	CCLayer * layer = drawPaint::create();
	s->addChild(layer);
	return s;
}

bool drawPaint::init()
{
	bool bRet = false;
	do 
	{
		CC_BREAK_IF(!CCLayer::init());//这里不加冒号很容易出错;要注意;
		//画笔创建;
		pen = CCSprite::create("pen.png");
		pen->setVisible(false);
		pen->setAnchorPoint(ccp(0,0));
		addChild(pen);

		//注册触屏事件;
		CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, false);

		bRet = true;
	} while (0);

	return bRet;
}
bool drawPaint::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
	if (_isTouchDraw)
	{
		_point.push_back(pTouch->getLocation());//存入第一个点:
		pen->setVisible(true);//让画笔显示;
		pen->setPosition(pTouch->getLocation());//设置画笔位置;
	}		
	return _isTouchDraw;
}

void drawPaint::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)
{
	//移动的过程中记录点的坐标,并存放到数组中;
	_point.push_back(pTouch->getLocation());
	pen->setPosition(pTouch->getLocation());
}
void drawPaint::ccTouchEnded(CCTouch * pTouch, CCEvent * pEvent)
{
	pen->setVisible(false);//让画笔消失;
	touchEndPos = ccp(-1, -1);//随便存一个在屏幕外的点作为结束点;
	_point.push_back(touchEndPos);//把结束点存放到数组里;

}

//根据存放的点来绘制图片;
void drawPaint::draw()
{
	
	CCLayer::draw();
	ccDrawColor4B(255, 255, 255, 255);//颜色;
	glLineWidth(_penBold);//粗细;
	if (_point.size()!=0)
	{
		int count = _point.size();//记录点的个数;
		static bool isFirstPoint = false;//是否是第一个点;
		for (int i = 0; i < count;++i)
		{
			//获取点的位置;
			CCPoint pos = _point[i];
			if (pos.equals(touchEndPos))//检测结束点是否和数组尾点相等;
			{
				isFirstPoint = true;
			}
			else
			{
				if (isFirstPoint || i == 0)
				{
					ccDrawPoint(ccp(pos.x,pos.y));//i= 0时,画第一个点;
					isFirstPoint = false;
				}
				else
				{
					CCPoint p = _point[i - 1];// i-1个,不能让数组越界;
					ccDrawLine(ccp(pos.x,pos.y),ccp(p.x,p.y));//根据数组里的点来画线;
				}
			}
		}
	
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值