2013-06-17 1 views
4

Я использую собственный шрифт под названием KomikaTitle. В некоторых случаях шрифт оказывается отрезанным слева в первом символе. Этого не происходит, когда я использую собственный шрифт, такой как Arial.Как запретить отображение пользовательского шрифта в Cocos2d

scoreDisplayLabel = [CCLabelTTF labelWithString:@"0" dimensions:CGSizeMake(200,30) hAlignment:UITextAlignmentLeft fontName:@"KomikaTitle" fontSize:18]; 
scoreDisplayLabel.color = (ccc3(r,b,g)); 
[self addChild:scoreDisplayLabel z:2]; 
[scoreDisplayLabel setPosition:ccp(115,wins.height-73)]; 

Как предотвратить это:

это код, я использую следующий? Я прилагаю скриншот проблемы.

Я попытался возиться, как предлагалось в http://www.cocos2d-iphone.org/forums/topic/custom-font-being-cut-off/, но не повезло.

enter image description here

Спасибо, ребята!

+0

'kCCTextAlignmentCenter' лучше, чем' UITextAlignmentLeft' для параметра 'hAliginment:'. – Dalinaum

ответ

3

Возможно, это не настоящий ответ, но у меня была такая же проблема с этим шрифтом в старом проекте cocos2d, который я сделал. Просто добавлено дополнительное пространство и ряд.

+0

Oh..Добавить дополнительное пространство и строку на что? – AbhinavVinay

+0

К текстовой строке. – Mikael

+0

Т.е.вместо [CCLabelTTF labelWithString: @ "0" ... использовать [CCLabelTTF labelWithString: @ "0". С дополнительным пространством до 0 – Mikael

2

Это может быть или не быть связано, но в соответствии с this source вы должны указать расширение файла вашего шрифта. Где у вас есть

fontName:@"KomikaTitle" 

должно быть

fontName:@"KomikaTitle.ttf" 

, например.

+0

Я пробовал это. Не помогло, хотя:/ – AbhinavVinay

0

Если у вас есть пользователи андроид, использующие cocos2dx, это не обязательно простая проблема для решения, но это выполнимо, когда вы спускаетесь по кроличьей дыре. Это требует редактирования файла Cocos2dxBitmap.java, что означает, что любые сделанные изменения могут быть переопределены обновлением. В принципе, методы, используемые для измерения текста, являются, хотя и неверными, неадекватными.

Во-первых, нам нужно добавить новую переменную в TextProperty

private final int mX;

Далее замените computeTextProperty код следующим образом:

private static TextProperty computeTextProperty(final String pString, final int unusedWidth, final int unusedHeight, final Paint pPaint) { final FontMetricsInt fm = pPaint.getFontMetricsInt(); final int h = (int) Math.ceil(fm.bottom - fm.top); int maxContentWidth = 0; final String[] lines = Cocos2dxBitmap.splitString(pString, 0, 0, pPaint); /* Compute the max width. */ int temp = 0; float left = 0; for (final String line : lines) { //get a path from text Path path = new Path(); pPaint.getTextPath(line, 0, line.length(), 0, 0, path); RectF bounds = new RectF(); path.computeBounds(bounds, true); temp = (int) FloatMath.ceil(bounds.width()); //if the text extends to the left of 0 if (bounds.left < left) { left = bounds.left; } if (temp > maxContentWidth) { maxContentWidth = temp; //extend the width to account for text rendered to the left of 0 if (left < bounds.left) { maxContentWidth += (int) FloatMath.ceil(Math.abs(left)); } } } left = Math.abs(left); return new TextProperty(maxContentWidth, h, lines, (int) FloatMath.ceil(left)); }

Что есть в основном произошло то, что мы использовали информацию, возвращаемую текстовым путем, чтобы получить, если l eft bound меньше 0, что означает, что оно будет отображаться вне растрового изображения. Мы также расширяем ширину, когда есть несколько строк текста, поскольку мы собираемся сдвинуть все, чтобы они соответствовали левым границам, нам также нужны сдвиги справа.

Наконец, замените Computex с

private static int computeX(final String pText, final int pMaxWidth, final int pHorizontalAlignment, final int pX) { int ret = 0; int expectedWidth = pX + pMaxWidth; switch (pHorizontalAlignment) { case HORIZONTALALIGN_CENTER: ret = expectedWidth/2; break; case HORIZONTALALIGN_RIGHT: ret = expectedWidth; break; case HORIZONTALALIGN_LEFT: ret = pX; default: break; } return ret; }

Вы должны будете делать все сцеплениями себя, но это обеспечит наиболее точный визуализации текста.