cocos2d-x橡皮擦效果---

因为要这么一个橡皮擦的功能,原想往上找个现成的,结果吧,找了有近半个小时,没有啊,哎。各种群里问啊喊啊,没反应,得,自己搞吧。。。。这就出来了,分享一下吧,本人的第一篇技术贴。。。。

原理:opengl alpha混合

首先,需要一张底图,一张蒙版图。底图直接加载到当前layer。

其次,要搞个数组,记录一下触摸的轨迹,比较简单,就不说了。

蒙版图要跟底图分开并且在上层,触摸时擦掉蒙版,显示出底图。这里需要用到CCRenderTexture,。。。还是直接代码吧

void MoveOrbit::init(int width,int height,const CCPoint& aPoint,const char* pFileName)
{
 index = 0;
 m_checkNum = 0;
 m_renderW = width;
 m_renderH = height;
 CCSize s = CCDirector::sharedDirector()->getWinSize();
 this->setIsTouchEnabled(true);
 for(int i= 0; i < pt_count; ++ i)
 {
  path[i] = ccp(0,0);
 }
 m_target = CCRenderTexture::renderTextureWithWidthAndHeight(m_renderW,m_renderH);
 if (NULL == m_target)
 {
  return;
 }
 m_target->setPosition(aPoint);

 m_points[0] = ccp(m_renderW / 2,m_renderH / 2);
 m_points[1] = ccp(m_renderW / 4,m_renderH / 4);
 m_points[2] = ccp(m_renderW / 4,m_renderH * 3 / 4);
 m_points[3] = ccp(m_renderW * 3 / 4,m_renderH / 4);
 m_points[4] = ccp(m_renderW * 3 / 4,m_renderH * 3 / 4);

 m_sprite = CCSprite::spriteWithFile(pFileName);
 m_sprite->setPosition(ccp(0,0));
 m_sprite->retain();

 addChild(m_target,1);
}

void MoveOrbit::draw()
{
 m_target->begin();

 m_sprite->draw();

 glDisable(GL_TEXTURE_2D);
 glDisableClientState(GL_COLOR_ARRAY);
 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
 //===========================

 glColor4f(0,0,0,0);
 glBlendFunc(GL_SRC_ALPHA,GL_ZERO);
 glPointSize((GLfloat)KDis);
 ccDrawPoints(path,index);


 //==============================
 glEnable(GL_TEXTURE_2D);
 glEnableClientState(GL_COLOR_ARRAY);
 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 glBlendFunc( CC_BLEND_SRC, CC_BLEND_DST);
 glColor4f(0,0,0,1);


 m_target->end(false);
}

 MoveOrbit* orbit = MoveOrbit::creat(300,200,ccp(size.width / 2,size.height / 4),"HelloWorld.png");
 orbit->setObserver(this);
 addChild(orbit,100);

 CCSprite* sprite = CCSprite::spriteWithFile("test/dgg1.png");
 sprite->setPosition(ccp(size.width / 2, size.height / 2));
 addChild(sprite);

就这样吧,差不多核心代码就这些了,第一次发文,也不知道说点啥。。。。有问题QQ联系:277749000 子夜

猜你喜欢

转载自blog.csdn.net/heyanru/article/details/8064775