【问题标题】:How to implement circular clipper on an image in cocos2dx?如何在 cocos2dx 中对图像实现圆形裁剪器?
【发布时间】:2015-09-08 11:29:14
【问题描述】:

目标是实现 -> 在 cocos2dx 中的头像上进行圆形剪辑,使头像看起来像现在在 whatsapp 头像中的样子。
我想先在头像上设置一个剪辑器,然后根据需要进行缩放。

【问题讨论】:

  • 你为什么不尝试使用 ClippingNode?​​span>

标签: cocos2d-iphone cocos2d-x cocos2d-x-3.0 cocos2d-android


【解决方案1】:

我在 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多