加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2d-x 画笔实现

发布时间:2020-12-14 19:58:26 所属栏目:百科 来源:网络整理
导读:#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(){bo
#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,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);//颜色;
	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));//根据数组里的点来画线;
				}
			}
		}
	
	}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读