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 子夜

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值