ClippingNode的使用之为节点添加动态光效

效果:


游戏中经常会用到这种效果,今天,实现下,方便以后使用。


实现方法:

1.添加ClippingNode

2.ClippingNode添加模板(即我们要添加动态光效的模板)

3.添加光效到ClippingNode

4.ClippingNode添加到节点中


下面,将把这个过程封装到一个方法中,用的时候,直接调用这个方法就OK了。


源码:

.h

void clipping(cocos2d::Node * pNode,std::string fileName);

.cpp

void DemoMainLayer::clipping(cocos2d::Node * pNode, std::string fileName)
{
	Vec2 pos = pNode->getPosition();
	Size size = pNode->getContentSize();

	ClippingNode* clippingNode = ClippingNode::create();
	clippingNode->setInverted(false);
	clippingNode->setAlphaThreshold(0);
	clippingNode->setStencil(pNode);

	auto light = Sprite::create(fileName, Rect(0, 0, size.width, size.height));
	clippingNode->addChild(light);
	light->setOpacity(150);
	light->setPosition(Vec2(pos.x - size.width / 2 - light->getContentSize().width / 2, pos.y));

	float dis = size.width + light->getContentSize().width;
	auto moveBy = MoveBy::create(0.8f, Vec2(dis, 0));
	auto place = Place::create(light->getPosition());
	auto seq = Sequence::create(moveBy, Hide::create(), DelayTime::create(1.0f), place, Show::create(), nullptr);
	light->runAction(RepeatForever::create(seq));

	addChild(clippingNode, pNode->getLocalZOrder() + 5);
}

使用:

auto title = Sprite::create("game_title.png");
	addChild(title, this->getLocalZOrder());
	title->setPosition(SFUtils::getCenterPos());

// 	auto title = Label::createWithTTF("HelloWorld", "fonts/Marker Felt.ttf",50.0f,Size::ZERO,cocos2d::TextHAlignment::RIGHT);
// 	addChild(title);
// 	title->setPosition(SFUtils::getCenterPos());
// 	title->setColor(Color3B(0, 255, 255));
	clipping(title,"light_red.png");


 从上面的代码可以看出,这个效果也是可以用于Label的。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值