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中有任何类会自动实现这一点。我试图通过结合维度
,调整字体大小以适应
和最小字体大小
设置来解决这个问题。将尺寸指定为仅容纳一行,标签的其余部分将被剪裁(遗憾的是没有省略号)。