如何使用自定义颜色创建带有中文和日文字符的Label

时间:2016-08-07 18:32:41

标签: c++ cocos2d-x cocos2d-x-3.0

我使用cocos2d-x(c ++)ver。 3.8 on tvOS(Apple TV)

我不想使用TTF版本,因为我没有合适的Arial TTF字体,其中包含中文和日文字符,但文件大小可接受(最多1MB)。

如果我使用Label::createWithSystemFont(),则不允许更改文字颜色。至少我没有找到它如何改变它。

auto *n =  Label::createWithSystemFont("洗牌位置", font, fontSize, dimensions, hAlignment, vAlignment);
n->setColor(Color3B::RED);
n->setTextColor(Color4B::RED);

这会产生黑色文字......

修改

在绝望的情况下,我尝试了一些你可能认为我疯了的事情。 但它既不起作用也不起作用。结果仍然是黑色的。你知道如何改变Label的颜色吗?

Node* NodeFactory::colorizeLabel (Label *lbl, const Color3B& color)
{
     auto *maskSprite = lbl;

    CCRenderTexture * rt;
        rt = CCRenderTexture::create(
                                     maskSprite->getContentSize().width*maskSprite->getScaleX(),
                                     maskSprite->getContentSize().height*maskSprite->getScaleY()
                                     , kCCTexture2DPixelFormat_RGBA8888
        );
        maskSprite->setPosition(ccp(
                                    (maskSprite->getContentSize().width*maskSprite->getScaleX())/2,
                                    (maskSprite->getContentSize().height*maskSprite->getScaleY())/2
                                    )
                                );


    //rt->begin();
    rt->beginWithClear(120, 120, 0, 0);
    ((Node*)maskSprite)->visit();
    rt->end();

    Sprite *retval = Sprite::createWithTexture(rt->getSprite()->getTexture());
    retval->setColor(Color3B::WHITE);
    //retval->setBlendFunc((ccBlendFunc) { GL_SRC_COLOR, GL_ONE });

    return retval;
}

1 个答案:

答案 0 :(得分:0)

在tvOS上找到有色系统字体的解决方案: FIX:CCDevice-tvos.mm:

ORIG:

[str drawInRect:rect withAttributes:@{ NSFontAttributeName: font, NSParagraphStyleAttributeName:paragraphStyle }];

NEW:

[str drawInRect:rect withAttributes:@{ NSFontAttributeName: font, NSParagraphStyleAttributeName:paragraphStyle,
    NSForegroundColorAttributeName:[UIColor colorWithRed:info->tintColorR green:info->tintColorG blue:info->tintColorB alpha:info->tintColorA]
}];