解决方案:修改OpenGL渲染参数
void AppDelegate::initGLContextAttrs() {
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
GLContextAttrs glContextAttrs = { 8, 8, 8, 8, 24, 8 };
#else
GLContextAttrs glContextAttrs = { 5, 6, 5, 0, 16, 8 };
#endif
GLView::setGLContextAttrs(glContextAttrs);
}
裁剪方法示例:
/*
* 设置相关图片,返回设置好后的精灵
* @param imgPath:头像图片路径
* @param maskPath:模板图片路径
* @param circlePath:边框路径
*/
void CGameClientView::addMyHeadCirCleIcon(Texture2D *iconTexture,CSpriteImage *mask, CSpriteImage *parentNode)
{
do
{
CC_BREAK_IF(!m_pUandDbarLayer || !m_pDownBarSprite);
CC_BREAK_IF(!iconTexture);
CC_BREAK_IF(!mask || !parentNode);
parentNode->removeChildByTag(91);
parentNode->removeChildByTag(200);
parentNode->removeChildByTag(118);
auto clipNode = ClippingNode::create();
/* 底板 */
auto circle = Sprite::create("4/LayerGameRes/bottom_my_icon_bg.png");
circle->setPosition(mask->getPosition());
circle->setTag(118);
parentNode->addChild(circle);
/* auto mask = Sprite::create(maskPath); */
clipNode->setAlphaThreshold(0.0f);
clipNode->setStencil(circle);
/* auto img = Sprite::create(imgPath); */
auto img = Sprite::createWithTexture(iconTexture);
/* 将头像大小缩放为模板大小 边框有误差 减去20pixel*/
img->setScaleX((mask->getContentSize().width-20.f)/img->getContentSize().width);
img->setScaleY((mask->getContentSize().height-20.f)/img->getContentSize().height);
img->setPosition(mask->getPosition());
clipNode->addChild(img);
clipNode->setTag(200);
parentNode->addChild(clipNode);
clipNode->setInverted(false);
/* 裁剪的有锯齿 所以加个中心透明带边框 像素尺寸一只的图 覆盖 */
auto side = Sprite::create("4/LayerGameRes/bottom_my_icon_sencil.png");
side->setPosition(mask->getPosition());
side->setTag(91);
parentNode->addChild(side);
} while (0);
}