关于CCLabelTTF的描边

安卓平台的,使用
enableStroke,我设置颜色ccc3(255, 0, 0)还是红色的,ccc3(254, 0, 0)就成黑色了

还有,描边是向内描边的,导致描边越粗,字体就显得越细

难道没人使用描边功能吗

沉的好快

大家都是自己写描边方法的吗?

— Begin quote from ____

引用楼主孤独の快乐于2014-02-26 11:38发表的 关于CCLabelTTF的描边 :

安卓平台的,使用
enableStroke,我设置颜色ccc3(255, 0, 0)还是红色的,ccc3(254, 0, 0)就成黑色了

还有,描边是向内描边的,导致描边越粗,字体就显得越细
http://www.cocoachina.com/bbs/job.php?action=topost&tid=187416&pid=tpc

— End quote

android平台没测试过,ios出现过这个问题
查了半天发现引擎有地方写错了,具体哪个地方写错了,忘了
记得好像是(r,g,b),改成(r/255.0f, g/255.0f, b/255.0f)就可以了

当时好像是2.1.x版本的,后来发现引擎更新后这个bug修复了
如果你用的是老引擎,可以查查

请问这个问题解决了么。我也遇到这个问题了

描出来的边都是黑色的,用Label配置TTFConfig是没有问题的,但是直接使用LabelTTF设置描边都变成黑色的。

楼上几位使用的是哪个版本呢。

3.0正式版的,刚下载的

创建Label使用freetype支持的字体文件时,描边效果各平台都支持,效果一致,是外描边。
如果是使用字体名称创建的label,描边依赖于系统api,只在android和ios支持。

auto label5 = LabelTTF::create(“Hello World”, “arial”, 40);
label5->setPosition( Point(size.width/2, size.height*0.36-50) );
label5->setColor( Color3B::BLUE );
label5->setAnchorPoint(Point::ANCHOR_MIDDLE);
label5->enableStroke(Color3B::RED, 5);
addChild(label5);
代码我是这么写的,用的是Arial的字体,我看Android的源代码是直接用Canvas.drawText画出来的,颜色值传过去也没错,但是画出来的颜色就是不对

if ( stroke ) {

        final Paint paintStroke = Cocos2dxBitmap.newPaint(fontName, fontSize, horizontalAlignment);
        paintStroke.setStyle(Paint.Style.STROKE);
        paintStroke.setStrokeWidth(strokeSize );
        Log.i("stroke color section","stroke color.r = "+Math.round(strokeR * 255)+", g = "+Math.round(strokeG * 255)+", b = "+Math.round(strokeB * 255));
        paintStroke.setARGB(125, Math.round(strokeR * 255), Math.round(strokeG * 255), Math.round(strokeB * 255));
        x = 0;
        y = Cocos2dxBitmap.computeY(fontMetricsInt, height, textProperty.mTotalHeight, verticalAlignment);
        final String] lines2 = textProperty.mLines;
        
        for (final String line : lines2) {
            
            x = Cocos2dxBitmap.computeX(line, textProperty.mMaxWidth, horizontalAlignment);
            canvas.drawText(line, x + renderTextDeltaX, y + renderTextDeltaY, paintStroke);
            y += textProperty.mHeightPerLine;
            
        }
        
    }

这个是Android下面的代码

描绿色的时候出来的是黑色,描红色的时候出来的是灰色。。

这个是Android屏幕截图,最下面的Hello World是用LabelTTF创建的,并且加了描边

这边我遇到的一个主要问题就是,我的Scrollview是用的ui控件的,也就是继承Layout的,然后我里面的CustomItem也都是继承Layout的。我没记错的话,Layout的子节点只能是Layout,而不能是node。因为在Widget下面有这么一个断言:
void Widget::addChild(Node* child, int zOrder, int tag)
{
CCASSERT(dynamic_cast<Widget*>(child) != nullptr, “Widget only supports Widgets as children”);
Node::addChild(child, zOrder, tag);
_widgetChildren.pushBack(child);
}
而我想在我的CustomItem里面放入描边字体,这个描边字貌似也只能是Widget的。但是目前的Text是不支持描边的,并且Text底层其实是一个LabelTTF,所以我只要解决了LabelTTF的描边问题,那Text的描边应该就没问题了。
但是在尝试LabelTTF的描边问题的时候遇到了上面的坑。
如果这些都暂时没解决的话,那我是否应该自行封装一个Text里面是放入Label的?因为Label使用TTFConfig来配置字体数据,并且加入描边都是没有问题的。

LabelTTF的描边会尽快修复.
LabelTTF目前内部已经用label封装,如果你字体名称实际上是一个字体文件的话,还是会走freetype的描边处理。
关于ui部分的代码,我们会尽快替换掉labelttf和labelbmfont。

LabelTTF::create字体指定是一个字体文件的话会使用freetype创建字符的纹理,而不是使用系统api。

直接用LabelTTF指定ttf文件确实是走freetype的字符。并且描边是没有问题的。
希望能尽快修复LabelTTF的自身描边,非常感谢。
这边我有3个问题想请教一下:
1.使用Label配置TTFConfig,如果字体是系统默认的字体,那是不是其实跟使用LabelTTF走系统默认字体是一致的?
2.Widget只是使用Widget作为子节点是处于什么考虑?
3.在我的Android的Testcpp下面一直提示这个: cocos2d: fullPathForFilename: No file found at Arial. Possible missing file.
cocos2d: fullPathForFilename: No file found at Thonburi. Possible missing file.

1.配置TTFConfig创建label,如果字体路径只是一个字体名称,那么设置失效,label将恢复默认属性。
2.android下的log是因为指定字体名称时,没有做判断,都进行了完整路径判断,所以有文件找不到的log。稍后改正这块

对于使用字体名称创建的label,描边颜色错误的原因是因为setColor也会作用于描边颜色。新增setTextColor函数用于设置文本颜色,setColor保留原功能设计,将会对整体着色
https://github.com/cocos2d/cocos2d-x/pull/5893

— Begin quote from ____

引用第9楼风语于2014-03-18 14:44发表的 回 楼主(孤独の快乐) 的帖子 :
创建Label使用freetype支持的字体文件时,描边效果各平台都支持,效果一致,是外描边。
如果是使用字体名称创建的label,描边依赖于系统api,只在android和ios支持。 http://www.cocoachina.com/bbs/job.php?action=topost&tid=187416&pid=905506

— End quote

我糊涂了,2.2.2版本,我想使用自己的ttf字体,又想是外描边的,我该怎么写?