我在我的项目中使用Cocos2dx
。我注意到CCLabelTTF
绘制的文字比iOS 7
高2-3个像素。 iOS 6
中的行间距也大于iOS 7
中的行间距。
我在2个不同的设备上进行了测试。代码很简单:
CCLabelTTF *fLabel = CCLabelTTF::create(title, "Helvetica Bold", 14);
fLabel->setPosition(centerPoint);
node->addChild(fLabel);
有谁知道如何解决这个问题?
答案 0 :(得分:1)
回答我自己的问题。我找到了解决方案。我现在正在使用cocos2dx 2.2并且CCImage.mm
中存在错误。
Cocos2dx使用不推荐的方法来获取字符串大小。这就是为什么iOS 6中的字符串大小与iOS 7中的字符串大小不同的原因。
我在_calculateStringSize
文件中编辑了CCImage.mm
方法,这是我的代码:
static CGSize _calculateStringSize(NSString *str, id font, CGSize *constrainSize)
{
NSArray *listItems = [str componentsSeparatedByString: @"\n"];
CGSize dim = CGSizeZero;
CGSize textRect = CGSizeZero;
textRect.width = constrainSize->width > 0 ? constrainSize->width
: 0x7fffffff;
textRect.height = constrainSize->height > 0 ? constrainSize->height
: 0x7fffffff;
CGSize tmp;
if([str respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]){
NSDictionary *attributes = @{
NSFontAttributeName: font
};
tmp = [str boundingRectWithSize:textRect options:(NSStringDrawingOptions)(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:attributes context:nil].size;
[paragraphStyle release];
}else{
tmp = [str sizeWithFont:font constrainedToSize:textRect];
}
if (tmp.width > dim.width)
{
dim.width = tmp.width;
}
dim.height += tmp.height;
return dim;
}
我建议您使用此方法计算项目中的字符串大小。 希望它对某人有帮助。
答案 1 :(得分:0)
multiply the scale value to font size.
try this
CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();
float frameSize = pEGLView->getFrameSize();
float scaleFactor = frameSize.width / designResolutionSize.width ;
CCLabelTTF *fLabel = CCLabelTTF::create(title, "Helvetica Bold", 14*scaleFactor);
答案 2 :(得分:0)
Timur Mustafaev的实施存在一些小问题。这个应该正常工作:
static CGSize _calculateStringSize(NSString *str, id font, CGSize *constrainSize)
{
NSArray *listItems = [str componentsSeparatedByString: @"\n"];
CGSize dim = CGSizeZero;
CGSize textRect = CGSizeZero;
textRect.width = constrainSize->width > 0 ? constrainSize->width
: 0x7fffffff;
textRect.height = constrainSize->height > 0 ? constrainSize->height
: 0x7fffffff;
for (NSString *s in listItems)
{
CGSize tmp;
// Method only exists on iOS6+.
if([s respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]){
NSDictionary *attributes = @{NSFontAttributeName: font};
tmp = [s boundingRectWithSize:textRect options:(NSStringDrawingOptions)(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:attributes context:nil].size;
} else {
tmp = [s sizeWithFont:font constrainedToSize:textRect];
}
if (tmp.width > dim.width)
{
dim.width = tmp.width;
}
dim.height += tmp.height;
}
dim.width = ceilf(dim.width);
dim.height = ceilf(dim.height);
return dim;
}