所以这个有点难以解释。我有一个自定义Text类,当您更改其值时,它会自动调整大小并设置文本的宽度。然后,我接受该文本并在位图上绘制它以将其缩放以使文本看起来像素化。
我有一个名为maxWidth
的属性,如果您希望文本保持一定的宽度,则可以限制文本的宽度。默认情况下,maxWidth
是文本父级的宽度,因此不会被切断或意外地扩展父级的边界。
所以不幸的是,当我绘制文本时,它有时会在右侧被切断。现在我已经检查了所有值,并且width
和textWidth
显示在maxWidth
值范围内,但是当我通过屏幕截图查看时,我看到文本实际上是关于比它应该宽3个像素。
这是一张图片,可以更好地解释我的意思:
我打开边框,这样你就可以很容易地看到我的意思了。第一行上的“和”字被绘制在其边界之外。以下是在更改边界时处理调整文本大小的代码行。
override protected function checkResize(value:String):void {
var bufferWidth:uint = Math.floor(Number(defaultTextFormat.size) / bufferDivisor) + bufferMin;
var maxWidth:Number = this.maxWidth;
x = y = 0;
if (parent is Stage) {
var stageParent:Stage = Stage(parent);
super.width = stageParent.stageWidth;
super.height = stageParent.stageHeight;
if (maxWidth == 0) maxWidth = stageParent.stageWidth;
}
else {
super.width = parent.width;
super.height = parent.height;
if (maxWidth == 0) maxWidth = parent.width;
}
maxWidth = maxWidth / scale;
text = value;
if (textWidth + bufferWidth <= maxWidth) super.width = textWidth + bufferWidth;
else super.width = maxWidth;
super.height = textHeight + 4;
if (textSnapshot) updateSnapshot();
if (alignRelation) Align.alignTo(textSprite, alignRelation, alignDirection, alignXOffset, alignYOffest);
}
对于此文本,width
值特别指出它是512,这是正确的,因为那是maxWidth
。但是,如果您注意到文本中的顶行,它超出了512宽度边框,它实际上一直到515,即使它说width
为512.更奇怪的是textWidth
说它是510.4,即使第一行远远超过这个数量。我只是想知道我做错了什么或者是否有办法获得真正的textWidth
值。
答案 0 :(得分:0)
这似乎与嵌入字体有关,至少在我遇到同样问题的时候是这样。一种解决方法是设置文本字段的右边距,就像这样
var tf:TextFormat = new TextFormat();
tf.rightMargin = 10; // or whatever fixes your problem, e.g. relate it to font size
textField.setTextFormat(tf);