遮罩

CCSpritePersonalDataLayer::createMaskedSprite(CCSprite* src, CCSprite *maskSprite, CCSize maskSize)

{

    assert(src);

    assert(maskSprite);

    

    CCSize srcContent = src->getContentSize();

    CCSize maskContent = maskSprite->getContentSize();

    

    CCRenderTexture * rt = CCRenderTexture::renderTextureWithWidthAndHeight(srcContent.width, srcContent.height, kTexture2DPixelFormat_RGBA8888);

    

    float ratiow = maskSize.width / maskContent.width;

    float ratioh = maskSize.height / maskContent.height;

    

    maskSprite->setScaleX(ratiow);

    maskSprite->setScaleY(ratioh);

    

    maskSprite->setPosition(ccp(srcContent.width / 2, srcContent.height / 2));

    src->setPosition(ccp(srcContent.width / 2, srcContent.height / 2));

    

    ccBlendFunc blendFunc2 = { GL_ONE, GL_ZERO };

    maskSprite->setBlendFunc(blendFunc2);

    

    ccBlendFunc blendFunc3 = { GL_DST_ALPHA, GL_ZERO };

    src->setBlendFunc(blendFunc3);

    

    rt->begin();

    maskSprite->visit();

    src->visit();

    rt->end();

    

    

    CCSprite * retval = CCSprite::spriteWithTexture(rt->getSprite()->getTexture());

    retval->setFlipY(true);

    

    return retval;

}

 

 

//遮罩

CCSprite* maskedSprite(CCSprite* maskSprite, CCSprite* sprite)

{

    CCSize size = maskSprite->getContentSize();

    CCRenderTexture* render = CCRenderTexture::renderTextureWithWidthAndHeight(maskSprite->getContentSize().width,

                                                                               maskSprite->getContentSize().height);

    //CCLOG("---------getContentScaleFactor = %f", CCDirector::sharedDirector()->getContentScaleFactor());

    

    maskSprite->setPosition(ccp(size.width/2, size.height*0.49f));

    sprite->setPosition(ccp(sprite->getContentSize().width*0.5f, sprite->getContentSize().height*0.5f));

    

    ccBlendFunc func1 = {GL_ONE, GL_ZERO};

    ccBlendFunc func2 = {GL_DST_ALPHA, GL_ZERO};

    

    maskSprite->setBlendFunc(func1);

    sprite->setBlendFunc(func2);

    

    render->begin();

    maskSprite->visit();

    sprite->visit();

    render->end();

    

    CCSprite *mySprite = CCSprite::spriteWithTexture(render->getSprite()->getTexture());

    mySprite->setFlipY(true);

    return mySprite;

}

 

posted @ 2013-11-15 15:01  六界剑仙  阅读(144)  评论(0)    收藏  举报