cocos2d實現刮獎效果

你的財神爺發表於2018-02-24
  1. bool HelloWorld::init()  
  2. {  
  3.     if ( !Layer::init() )  
  4.     {  
  5.         return false;  
  6.     }  
  7.     Size visibleSize = Director::getInstance()->getVisibleSize();  
  8.     auto sprite = Sprite::create("HelloWorld.png");  
  9.     sprite->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2));  
  10.     this->addChild(sprite);  
  11.     dotNode = DrawNode::create();  
  12.     dotNode->retain();  
  13.     dotNode->drawDot(Point(0, 0), 4.0f, Color4F(255, 0, 0, 255));  
  14.     auto pBg = Sprite::create("bg.png"); //這個作為當“油漆層”    
  15.     pBg->setAnchorPoint(Point(0.5, 0.5));  
  16.     pBg->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2));  
  17.     pRender = RenderTexture::create(visibleSize.width, visibleSize.height);  
  18.     pRender->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2));  
  19.     this->addChild(pRender); //渲染紋理層需加入該父節點層    
  20.     pRender->begin();  
  21.     pBg->visit();  
  22.     pRender->end();  
  23.     auto listener = EventListenerTouchOneByOne::create();  
  24.     listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan,this);  
  25.     listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved,this);  
  26.     listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);  
  27.     _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);  
  28.     return true;  
  29. }  

  1. void HelloWorld::onTouchMoved(Touch *touch, Event *unused_event)  
  2. {  
  3.     auto touchPoint = touch->getLocation();  
  4.     dotNode->setPosition(touchPoint.x, touchPoint.y);  
  5.     //設定混合模式  
  6.     BlendFunc blendFunc = { GL_ONE, GL_ZERO };  
  7.     dotNode->setBlendFunc(blendFunc);  
  8.     //將橡皮擦的畫素渲染到畫布上,與原來的畫素進行混合  
  9.     pRender->begin();  
  10.     dotNode->visit();  
  11.     pRender->end();  
  12. }  

效果圖:




相關文章