DrawNode遮罩

来源:互联网 发布:sql导入excel数据 编辑:程序博客网 时间:2024/05/20 21:22

话不多说

spriteNode = sprite;

spriteNode->setAnchorPoint(Vec2(0.5, 0.5));


clippeNode = ClippingNode::create();
clippeNode->setInverted(true);//设置底板可见(显示裁剪区域)
clippeNode->setAlphaThreshold(255);//设置绘制模板的alpha值


this->addChild(clippeNode, 10);
LayerColor *layerColor = LayerColor::create(Color4B(0, 0, 0, 0));
clippeNode->addChild(spriteNode);
clippeNode->addChild(layerColor);


// DrawNode *pDrawNode = DrawNode::create();
// Color4F drawColor = { 1, 1, 0, 0 };
// Vec2 rect[4] = {
// Vec2(-numRadius, 0),
// Vec2(-numRadius, numRadius*2),
// Vec2(numRadius, numRadius*2),
// Vec2(numRadius, 0)
// };
// pDrawNode->drawPolygon(rect, 4, drawColor, 0, drawColor);
// pDrawNode->setPosition(offset);
// pDrawNode->setAnchorPoint(Vec2(0.5, 0));
// pDrawNode->setRotation(originAngle);
Sprite *pDrawNode = Sprite::create("4.png");
pDrawNode->setAnchorPoint(Vec2(0.5, 0));
pDrawNode->setPosition(offset);
pDrawNode->setRotation(originAngle);
//抗锯齿  
pDrawNode->getTexture()->setAntiAliasTexParameters();
//pDrawNode->getTexture()->setAliasTexParameters();//不抗锯齿

clippeNode->setStencil(pDrawNode);

这部分代码其实在做一个写一个环形进度条的,不过后来一想这部分代码的实现可以做的事好多,比如说消除类的游戏,消除了部分元素后补充的元素从上方掉下来,只是在消除区域才能看到,我当时就在想怎么做到的,后来写了这个之后觉得可能就是通过上面这种形式实现的,rect你自己画一个矩形然后只显示矩形以内的东西,这样就可以实现了,

LayerColor *colorLayer = LayerColor::create(Color4B(0, 0, 0, 0));
colorLayer->setPosition(Vec2(-middleStar_x + 4.5 * starPriteSize.width, -middleStar_y + 4.5 * starPriteSize.height));
node = ClippingNode::create();
node->setPosition(Vec2(middleStar_x - 4.5 * starPriteSize.width, middleStar_y - 4.5 * starPriteSize.height));
this->addChild(node);
node->setInverted(false);
node->setAlphaThreshold(255);
node->addChild(colorLayer, 0);


DrawNode* pDrawNode = DrawNode::create();
Color4F drawColor = { 0, 0, 0, 0 };
Vec2 rect[4] = {
Vec2(0, 0),
Vec2(9 * starPriteSize.width, 0),
Vec2(9 * starPriteSize.width,  9 * starPriteSize.height),
Vec2(0, 9 * starPriteSize.height)
};
pDrawNode->drawPolygon(rect, 4, drawColor, 0, drawColor);
pDrawNode->setPosition(Vec2::ZERO);
node->setStencil(pDrawNode);


然后只需要把元素添加在colorLayer上就可以了,希望对博友有帮助。

0 0
原创粉丝点击