cocos2dx 新手引導層
阿新 • • 發佈:2019-02-01
#ifndef __Test_ClipNode_H__ #define __Test_ClipNode_H__ #include "cocos2d.h" USING_NS_CC; class GuideLayer : public cocos2d::Layer { public: GuideLayer(); ~GuideLayer(); /* *color 層顏色 *rect 需要顯示的區域 */ static Layer* create(Color4B &color, Rect &rect); bool init(Color4B &color, Rect &rect); void setRectangle(Rect &rect); protected: Rect _unShowRect; }; #endif
</pre><pre name="code" class="cpp"><strong>cpp檔案</strong>
<pre name="code" class="cpp">#include "GuideLayer.h" USING_NS_CC; #define kTagClipperNode 1000 GuideLayer::GuideLayer() { } GuideLayer::~GuideLayer() { } Layer* GuideLayer::create(Color4B &color, Rect &rect) { // 'scene' is an autorelease object auto layer = new GuideLayer(); if (layer && layer->init(color,rect)) { layer->autorelease(); } else { CC_SAFE_DELETE(layer); } return layer; } void GuideLayer::setRectangle(Rect &rect) { _unShowRect = rect; } bool GuideLayer::init(Color4B &color, Rect &rect) { if (!Layer::init()) { return false; } auto visibleSize = Director::getInstance()->getVisibleSize(); setRectangle(rect); auto clipper = ClippingNode::create(); clipper->setContentSize(visibleSize); clipper->setAnchorPoint(Vec2(0.5, 0.5)); clipper->setPosition(this->getContentSize().width / 2, this->getContentSize().height / 2); clipper->setInverted(true); this->addChild(clipper); auto stencil = DrawNode::create(); Vec2 rectangle[4]; rectangle[0] = Vec2(_unShowRect.origin.x, _unShowRect.origin.y); rectangle[1] = Vec2(_unShowRect.size.width + _unShowRect.origin.x, _unShowRect.origin.y); rectangle[2] = Vec2(_unShowRect.size.width + _unShowRect.origin.x, _unShowRect.size.height + _unShowRect.origin.y); rectangle[3] = Vec2(_unShowRect.origin.x, _unShowRect.size.height + _unShowRect.origin.y); Color4F white(1, 1, 1, 1); stencil->drawPolygon(rectangle, 4, white, 1, white); clipper->setStencil(stencil); auto backGroundLayer = LayerColor::create(color, visibleSize.width, visibleSize.height);//被裁剪的內容 clipper->addChild(backGroundLayer);//5 return true; }
使用示例:
//新增新手引導層 auto rectLayer = GuideLayer::create(Color4B(123, 123, 123, 255), Rect(429, 608, 110, 36)); rectLayer->setPosition(Point::ZERO); this->addChild(rectLayer, 2); //新增提示語 auto labelTip = Label::createWithTTF("Tips : this is Hello World", "fonts/Marker Felt.ttf", 24); labelTip->setColor(ccc3(255,0,0)); labelTip->setPosition(Vec2(origin.x + visibleSize.width / 2, origin.y + visibleSize.height - label->getContentSize().height * 2)); rectLayer->addChild(labelTip, 1);
執行效果