cocos2d iphone - ¿Cómo evito que la fuente personalizada en Cocos2d parezca cortada?
cocos2d-iphone cclabelttf (3)
Estoy usando una fuente personalizada llamada KomikaTitle. En algunos casos, la fuente aparece cortada a la izquierda en el primer carácter. Esto no ocurre cuando uso una fuente nativa como Arial.
El siguiente es el código que estoy usando:
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)];
¿Cómo evito que esto suceda? Adjunto una captura de pantalla del problema.
Intenté jugar como se sugirió en http://www.cocos2d-iphone.org/forums/topic/custom-font-being-cut-off/ , pero no tuve suerte.
¡Gracias chicos!
Esto puede o no estar relacionado, pero de acuerdo con esta fuente , debe incluir la extensión del archivo de su fuente. Donde tienes
fontName:@"KomikaTitle"
debería ser
fontName:@"KomikaTitle.ttf"
por ejemplo.
Puede que esta no sea una respuesta real, pero tuve el mismo problema con esa fuente en un viejo proyecto de cocos2d que hice. Acabo de agregar un espacio extra y una fila.
Si hay usuarios de Android usando cocos2dx, este no es necesariamente un problema fácil de resolver, pero es factible una vez que pasas por el agujero del conejo. Requiere editar el archivo Cocos2dxBitmap.java, lo que significa que cualquier cambio realizado podría ser anulado por una actualización. Básicamente, los métodos que se utilizan para medir el texto son, aunque no son incorrectos, inadecuados.
Primero, necesitamos agregar una nueva variable a TextProperty
private final int mX;
A continuación, reemplace el código computeTextProperty con lo siguiente:
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)); }
Lo que básicamente ha sucedido es que hemos utilizado información devuelta por la ruta del texto para obtener si el límite izquierdo es menor que 0, lo que significaría que se representaría fuera del mapa de bits. También ampliamos el ancho cuando hay varias líneas de texto, ya que vamos a cambiar todo para que coincida con los límites de la izquierda, también necesitamos que se modifiquen los límites correctos.
Finalmente, reemplace computeX con
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; }
Tendrá que hacer todas las conexiones usted mismo, pero esto proporcionará la representación de texto más precisa.