的我有带小孩(精灵)的容器(精灵)添加到它。 当我缩放容器,我想获得孩子的新宽度,但是当我找到这些儿童的宽度,我总是得到原始尺寸,即使一切都得到视觉缩放,因为它应该。 如何覆盖孩子宽度?缩放的容器不影响孩子的宽度
更新: 我刚刚发现的children.graphics-“尺寸”可能造成的问题。当我离开图形时,一切似乎都没问题。是否有可能与儿童精灵同时缩放图形?
的我有带小孩(精灵)的容器(精灵)添加到它。 当我缩放容器,我想获得孩子的新宽度,但是当我找到这些儿童的宽度,我总是得到原始尺寸,即使一切都得到视觉缩放,因为它应该。 如何覆盖孩子宽度?缩放的容器不影响孩子的宽度
更新: 我刚刚发现的children.graphics-“尺寸”可能造成的问题。当我离开图形时,一切似乎都没问题。是否有可能与儿童精灵同时缩放图形?
您可以像下面使用DisplayObject.transform.pixelBounds.width
或DisplayObject.transform.pixelBounds.height
获得子显示对象的宽度和高度:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}// end function
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var squaresXml:XML =
<squares>
<square name="redSquare" color="0xFF0000" />
<square name="blueSquare" color="0x00FF00" />
<square name="greenSquare" color="0x0000FF" />
</squares>;
var size:Number = 100;
var squares:Sprite = new Sprite();
for (var i:uint = 0; i < squaresXml.children().length(); i++)
{
var square:Square = new Square(squaresXml.square[i][email protected], size);
square.name = squaresXml.square[i][email protected];
square.x = i * size;
squares.addChild(square);
}// end for
addChild(squares);
squares.scaleX = squares.scaleY = 2;
var redSquare:Square = squares.getChildByName("redSquare") as Square;
trace(redSquare.width); // output: 100
trace(redSquare.transform.pixelBounds.width); // output : 200;
}// end function
}// end class
}// end package
import flash.display.Shape;
import flash.display.Sprite;
internal class Square extends Shape
{
public function Square(color:uint, size:Number)
{
graphics.beginFill(color);
graphics.drawRect(0, 0, size, size);
graphics.endFill();
}// end function
}// end class
DisplayObject.transform.pixelBounds
基本上得到“一个Rectangle
对象,它定义显示对象的边界矩形舞台”。
孩子宽度总是将是什么,原来,满刻度值。如果你想获得它们的当前宽度,只需将该值与容器的缩放比例相乘即可。
因此,举例来说,如果你的孩子宽度为100个像素,并且您缩放容器的一半大小:100个像素×0.5 = 50个像素。或用代码:actualChildWidth = container.scaleX * child.width;
我也建议使用您的显示对象的变换concatenatedMatrix
。这将返回一个二维变换矩阵,乘以对象的父链到根级。
一旦得到生成的Matrix对象,您可以检查其a
或d
属性,以分别查看其根级x和y缩放因子。
是不是一次缩放所有值的可能性,因为如果我确实将子宽设置为您的actualChildWidth,那么孩子会再次在视觉上缩放... – algro 2011-05-26 16:36:30
是的,您不应该设置此值,这是计算并用于任何你需要的儿童宽度。也许有点详细说明你的问题,以便我们了解你想解决什么问题! – dain 2011-05-26 20:03:14