文章出自于 http://blog.csdn.net/zhouyunxuan
private:
ClippingNode* _outerClipper;
Node* _holesStencil;
// 获取屏幕大小
auto s = Director::getInstance()->getWinSize();
// 创建精灵
auto target = Sprite::create("yunxuan.png");
target->setAnchorPoint(Vec2::ZERO);
// 不要设置精灵的位置,比较难搞,只要把它初始化就好了,然后到ClippingNode来设置
_outerClipper = ClippingNode::create();
_outerClipper->setContentSize( target->getContentSize());
_outerClipper->setAnchorPoint(Vec2(0.5, 0.5));
_outerClipper->setPosition(s / 2);
_outerClipper->setStencil( target );
auto holesClipper = ClippingNode::create();
holesClipper->setInverted(true);
holesClipper->setAlphaThreshold( 0.05f );
holesClipper->addChild(target);
_holesStencil = Node::create();
holesClipper->setStencil( _holesStencil);
_outerClipper->addChild(holesClipper);
this->addChild(_outerClipper);
auto listener = EventListenerTouchAllAtOnce::create();
listener->onTouchesBegan = [&](const std::vector<Touch*>& touches, Event* event){
Touch *touch = (Touch *)touches[0];
auto point = _outerClipper->convertToNodeSpace(Director::getInstance()->convertToGL(touch->getLocationInView()));
auto holeStencil = Sprite::create("jing.png");
holeStencil->setPosition( point );
_holesStencil->addChild(holeStencil);
};
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);