Flash 如何将多行文本字段(动态,文本居中)垂直居中到另一个MovieClip?

Flash 如何将多行文本字段(动态,文本居中)垂直居中到另一个MovieClip?,flash,actionscript-3,actionscript,flash-cs4,Flash,Actionscript 3,Actionscript,Flash Cs4,通常,要使舞台上的一个实例垂直水平居中于另一个实例的中心,可以使用简单的逻辑,并通过引用所涉及符号的宽度、高度、x和y坐标 这在现场似乎是不可能的,因为Textfield.height和Textfield.textHeight报告的值不正确。它们返回相同的值,这些值并不反映舞台上实例的实际高度 我制作了这个简单的示例来说明问题: 谢谢。文本字段的高度与文本本身的高度无关。 文字高度可能因多种原因而改变。 字体系列和字体大小就是一个很好的例子。 您需要使用文本度量来获取该信息。 [编辑] 根据

通常,要使舞台上的一个实例垂直水平居中于另一个实例的中心,可以使用简单的逻辑,并通过引用所涉及符号的宽度、高度、x和y坐标

这在现场似乎是不可能的,因为Textfield.height和Textfield.textHeight报告的值不正确。它们返回相同的值,这些值并不反映舞台上实例的实际高度

我制作了这个简单的示例来说明问题:


谢谢。

文本字段的高度与文本本身的高度无关。
文字高度可能因多种原因而改变。 字体系列和字体大小就是一个很好的例子。
您需要使用文本度量来获取该信息。

[编辑]
根据您的注释,ScaleTextToBitExtField函数的最后一行应该执行此操作。 您需要找到两个对象的中心并减去它们,然后添加偏移

txt.x = cont.width/2 - txt.width/2 + cont.x
txt.y = cont.height/2 - txt.height/2 + cont.y
[编辑]
同时删除这两行,因为它们现在是多余的

red.tf.x = red.mchammer.x;
red.tf.y = red.mchammer.y;

我可能误解了你的问题,但如果不是,你试过这个吗

red.tf.y = red.blue.height / 2 - red.tf.height / 2 + red.blue.y;
这将使文本字段(tf)垂直居中于蓝色框

基本上,您得到蓝色矩形的中心y坐标,减去文本字段的中心y坐标,然后最后添加蓝色矩形的y位置

为了获得最佳结果,您需要定义了自动调整大小的文本字段,并且movieclips具有(0,0)参考点

它在水平方向上是相同的,但带有x坐标和宽度参数

red.tf.x = red.blue.width / 2 - red.tf.width / 2 + red.blue.x;

var-metrics:TextLineMetrics=myRoot.container.txtLine1.getLineMetrics(0);跟踪(“度量:+度量.高度)此代码仍然生成错误的高度。它的高度肯定超过7像素。我可以确认上面的注释中的代码显示了设计时文本字段的大小(以像素为单位)。如果我在IDE中更改字体大小,这里就证明了这一点。此外,根据Adobe的说法,TextField.textHeight应该返回文本的高度(以像素为单位)。就我而言,情况并非如此。AS2(IIRC)中的一个已知问题是字体度量完全错误。你应该研究以确保它在AS3中给出正确的读数,你是否包括2像素的顶部排水沟和2像素的底部排水沟?加上前导间隙(如果它是多个的话)。在我问题的后半部分,我提到的主要问题是高度报告不正确。不幸的是,这个答案毫无意义。那我不明白你说的是什么尺寸。如果设置文本字段的自动大小,则实际对象将围绕您键入的文本,并且文本字段的高度将正确。如果你想更深入,那么textmetrics就是你想要的。请不要告诉我它报告了正确的高度。这个问题的关键在于它没有返回正确的高度。如果你仔细阅读了这个问题,你就会明白这一点。