使用Cocosd-x3.2的颜色混合功能和裁剪功能完成光照效果,简单易用,效果图如下:
代码:
- //底图,光照图(一般是有透明度的白色图) 光移动的时间,循环次数
- Node * HelloWorld::createFlashNode(const std::string &spName,const std::string &splashName,float duration,int loops)
- {
- auto clNode = ClippingNode::create();
- auto stecil = Sprite::create(spName);
- clNode -> setStencil(stecil);
- clNode -> setAlphaThreshold(0.1);
-
- auto star = Sprite::create(spName);
- clNode -> addChild(star);
-
- auto splash = Sprite::create(splashName);
- star -> addChild(splash);
- //关键代码
- splash -> setBlendFunc({GL_DST_COLOR,GL_ONE});
- // splash -> setPosition(splash->getContentSize().width/2-star->getContentSize().width,splash->getContentSize().height/2);
-
- auto place = Place::create(Vec2(splash->getContentSize().width/2-star->getContentSize().width,splash->getContentSize().height/2));
- auto moto = MoveTo::create(duration,Vec2(splash->getContentSize().width/2+star->getContentSize().width,splash->getContentSize().height/2));
- auto seq = Sequence::create(place,moto,NULL);
- ActionInterval *repeat = nullptr;
- if (loops!=-1)
- {
- repeat = Repeat::create(seq,loops);
- }
- else
- {
- repeat = RepeatForever::create(seq);
- }
- splash -> runAction(repeat);
-
- return clNode;
- }
-
- //调用
- auto no = createFlashNode("xingxing.png","light.png",2);
- this -> addChild(no);
- no -> setPosition(300,300);