您的位置:首页 > Web前端 > Node.js

终极版本ClippingNode理解

2016-11-23 11:17 148 查看
//底板
LayerColor* layer = LayerColor::create(Color4B::RED);
addChild(layer);

//裁剪节点由2部分组成,一部分通过addChild加入,一部分通过stencil加入
ClippingNode* node = ClippingNode::create();
addChild(node);

//sp通过addChild添加到ClippingNode中,那么sp就是被裁剪的内容
Sprite* sp = Sprite::create("HelloWorld.png");
sp->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));
float scaleX = visibleSize.width/sp->getContentSize().width;
float scaleY = visibleSize.height/sp->getContentSize().height;
sp->setScale(scaleX, scaleY);
node->addChild(sp);

//stencil可以理解为用来镂空ClippingNode, 镂空的模型
Sprite* stencil = Sprite::create("CloseNormal.png");
node->setStencil(stencil);

node->setInverted(true); //true表示镂空后显示底板,flase代表镂空后显示被裁剪的内容
node->setAlphaThreshold(0.05f);  //设置alpha阈值, 只有模板(stencil)的alpha像素大于alpha阈值(alphaThreshold)时内容才会被绘制,设置为0.05后,透明部分不会被绘制

//屏幕触摸事件
auto ev = EventListenerTouchOneByOne::create();
ev->onTouchBegan = [=](Touch* touch, Event* ev)
{
Vec2 touchPos = touch->getLocation();

Sprite* bulletEffect = Sprite::create("CloseNormal.png");
stencil->addChild(bulletEffect);
bulletEffect->setPosition(touchPos.x + bulletEffect->getContentSize().width/2, touchPos.y + bulletEffect->getContentSize().height/2);
return true;
};

ev->onTouchMoved = [=](Touch* touch, Event* ev)
{
Vec2 touchPos = touch->getLocation();

Sprite* bulletEffect = Sprite::create("CloseNormal.png");
stencil->addChild(bulletEffect);
bulletEffect->setPosition(touchPos.x + bulletEffect->getContentSize().width/2, touchPos.y + bulletEffect->getContentSize().height/2);

};

_eventDispatcher->addEventListenerWithSceneGraphPriority(ev, this);

参数为true



参数为false

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: