【发布时间】:2015-09-08 11:29:14
【问题描述】:
目标是实现 -> 在 cocos2dx 中的头像上进行圆形剪辑,使头像看起来像现在在 whatsapp 头像中的样子。
我想先在头像上设置一个剪辑器,然后根据需要进行缩放。
【问题讨论】:
-
你为什么不尝试使用 ClippingNode?span>
标签: cocos2d-iphone cocos2d-x cocos2d-x-3.0 cocos2d-android
目标是实现 -> 在 cocos2dx 中的头像上进行圆形剪辑,使头像看起来像现在在 whatsapp 头像中的样子。
我想先在头像上设置一个剪辑器,然后根据需要进行缩放。
【问题讨论】:
标签: cocos2d-iphone cocos2d-x cocos2d-x-3.0 cocos2d-android
我在 cocos2d-x v2.x 中为此目的使用了 RenderTexture。相信这种方法也适用于 v3.x。这是伪代码:
sprite* MaskedSpriteWithSprite(textureSpriteName, maskSpriteName)
{
sprite* textureSprite = create(textureSpriteName);
sprite* maskSprite = create(maskSpriteName);
textureSprite->setPosition(ccp(textureSprite.width * 0.5f, textureSprite.height * 0.5f));
maskSprite->setPosition(ccp(maskSprite.width * 0.5f, maskSprite.height * 0.5f));
renderTexture* rt = renderTexture::create(maskSprite.width, maskSprite.height);
ccBlendFunc bfMask = ccBlendFunc();
bfMask.src = GL_ONE;
bfMask.dst = GL_ZERO;
maskSprite->setBlendFunc(bfMask);
// turn off anti-aliasing around the mask sprite
maskSprite->getTexture()->setAliasTexParameters();
ccBlendFunc bfTexture = ccBlendFunc();
bfTexture.src = GL_DST_ALPHA;
bfTexture.dst = GL_ZERO;
textureSprite->setBlendFunc(bfTexture);
rt->begin();
maskSprite->visit();
textureSprite->visit();
rt->end();
// generate the resulting sprite
sprite* pOutcome = sprite::createWithTexture(rt->getSprite()->getTexture());
pOutcome->setFlipY(true);
return pOutcome;
}
【讨论】: