AS3自定义TextField文本正在其textWidth之外绘制

时间:2018-05-03 07:28:13

标签: actionscript-3 flash flex air flashdevelop

所以这个有点难以解释。我有一个自定义Text类,当您更改其值时,它会自动调整大小并设置文本的宽度。然后,我接受该文本并在位图上绘制它以将其缩放以使文本看起来像素化。

我有一个名为maxWidth的属性,如果您希望文本保持一定的宽度,则可以限制文本的宽度。默认情况下,maxWidth是文本父级的宽度,因此不会被切断或意外地扩展父级的边界。

所以不幸的是,当我绘制文本时,它有时会在右侧被切断。现在我已经检查了所有值,并且widthtextWidth显示在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值。

1 个答案:

答案 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);
相关问题