Ios 如何在cocos2dV3.0中截断标签

Ios 如何在cocos2dV3.0中截断标签,ios,xcode,cocos2d-iphone,Ios,Xcode,Cocos2d Iphone,当文本变大时,我试图截断标签,但它却从中心向左侧扩展 这是我的片段 CCLabelTTF *playerLabel = [CCLabelTTF labelWithString:[NSString stringWithFormat:@"Playerdadsadsd %d",i+1] fontName:@"Helvetica-Bold" fontSize:fontSize]; playerLabel.color = playerColor; playerLabe

当文本变大时,我试图截断标签,但它却从中心向左侧扩展

这是我的片段

 CCLabelTTF *playerLabel = [CCLabelTTF labelWithString:[NSString stringWithFormat:@"Playerdadsadsd %d",i+1] fontName:@"Helvetica-Bold" fontSize:fontSize];

        playerLabel.color =  playerColor;
        playerLabel.name = [NSString stringWithFormat:@"%d",1002+i];
        playerLabel.position = ccp(playerSprite.position.x + playerSprite.contentSize.width + 10, yPos);
        playerLabel.adjustsFontSizeToFit = YES;
        [self addChild:playerLabel];

我不确定您想要实现什么,但请尝试将
维度
参数传递给init方法:

//The label won't go out of this rectangle
CGSize rect = CGSizeMake(viewSize.width * 0.1f, viewSize.height * 0.1f);

NSString *text = [NSString stringWithFormat:@"Playerdadsadsd %d",i+1];
CCLabelTTF *playerLabel = [CCLabelTTF labelWithString: text 
                                             fontName: @"Helvetica-Bold"
                                             fontSize: fontSize
                                           dimensions: rect]; // <-- Note this parameter

//.. the rest of your code..
//标签不会超出此矩形
CGSize rect=CGSizeMake(viewSize.width*0.1f,viewSize.height*0.1f);
NSString*text=[NSString stringWithFormat:@“playerADSD%d”,i+1];
CCLabelTTF*playerLabel=[CCLabelTTF labelWithString:text
fontName:@“Helvetica Bold”
fontSize:fontSize

维度:rect];// 我在cocos2d-x中没有找到任何内在的解决方案来截断(带省略号或不带省略号)标签以适应指定的宽度,因此我编写了自己的函数

这是C++,但逻辑可以容易地复制到Objtovi-C < /P>

CCLabelTTF *createTruncatedLabel(const char *text, const char *fontFace, float fontSize, int width, bool useEllipsis)
{
    CCLabelTTF *ttfLabel = CCLabelTTF::create(text, fontFace, fontSize, CCSizeMake(0, 0), kCCTextAlignmentLeft);
    CCSize size = ttfLabel->getContentSize();

    if (size.width > width)
    {
        int len = strlen(text);
        float pc = (float)width / (float)size.width;
        int newLen = (int)((float)len * pc);
        size = setTruncLabel(ttfLabel, text, newLen, useEllipsis);

        if (size.width > width)
        {
            while (size.width > width)
            {
                newLen--;
                size = setTruncLabel(ttfLabel, text, newLen, useEllipsis);
            }
        }
        else
        {
            while (size.width < width)
            {
                newLen++;
                size = setTruncLabel(ttfLabel, text, newLen, useEllipsis);
            }

            if (size.width > width)
            {
                newLen--;
                setTruncLabel(ttfLabel, text, newLen, useEllipsis);
            }
        }
    }

    return ttfLabel;
}

CCSize setTruncLabel(CCLabelTTF *ttfLabel, const char*text, int len, bool useEllipsis)
{
    char newText[256] = {0};

    strncpy(newText, text, len);

    if (useEllipsis)
    {
        strcat(newText, "...");
    }

    ttfLabel->setString(newText);
    CCSize size = ttfLabel->getContentSize();

    return size;
}
CCLabelTTF*createTruncatedLabel(常量字符*文本,常量字符*字体面,浮点字体大小,整型宽度,布尔使用省略号)
{
CCLabelTTF*ttfLabel=CCLabelTTF::create(text,fontFace,fontSize,CCSizeMake(0,0),kccctextalignmentleft);
CCSize size=ttfLabel->getContentSize();
如果(size.width>width)
{
int len=strlen(文本);
浮点pc=(浮点)宽度/(浮点)大小.width;
int newLen=(int)((float)len*pc);
size=settrunlabel(ttfLabel、text、newLen、useEllipsis);
如果(size.width>width)
{
while(size.width>width)
{
纽伦--;
size=settrunlabel(ttfLabel、text、newLen、useEllipsis);
}
}
其他的
{
while(size.widthwidth)
{
纽伦--;
settrunlabel(ttfLabel、text、newLen、useEllipsis);
}
}
}
返回ttfLabel;
}
CCSize SETTRUCLABEL(CCLabelTTF*ttfLabel,常量字符*文本,整数长度,布尔使用省略号)
{
char newText[256]={0};
strncpy(newText,text,len);
如果(使用省略号)
{
strcat(新文本,“…”);
}
ttfLabel->setString(新文本);
CCSize size=ttfLabel->getContentSize();
返回大小;
}

谢谢你的回答。将使用用户名动态更新的标签。所以如果名称很长,我想截断它。我试过使用尺寸标注,它将线条分成多个部分。但我想展示这样的东西。Playerdadsa。我怎样才能实现它呢?@Anish,不幸的是,我不知道cocos2d中有任何类会自动实现这一点。我试图通过结合
维度
调整字体大小以适应
最小字体大小
设置来解决这个问题。将尺寸指定为仅容纳一行,标签的其余部分将被剪裁(遗憾的是没有省略号)。