我有一个容器(sprite),其中添加了子(sprite)。 当我缩放容器时,我想获得一个孩子的新宽度,但是当我追踪孩子的宽度时,我总是得到原始尺寸,即使所有内容都按照它应该进行视觉缩放。 如何覆盖子宽度?
更新: 我刚刚发现children.graphics-“维度”可能导致了这个问题。当我离开图形时,一切似乎都没问题。是否可以与子精灵同时缩放图形?
答案 0 :(得分:0)
子宽度始终是原始的满量程值。如果要获取当前宽度,只需将该值乘以容器的缩放比例。
因此,例如,如果您的子宽度为100像素,并且您将容器缩放到一半大小:100像素* 0.5 = 50像素。或者使用代码:actualChildWidth = container.scaleX * child.width;
答案 1 :(得分:0)
我还建议使用显示对象变换的concatenatedMatrix
。这将返回一个2D变换矩阵,将对象的父链向上乘以根级别。
获得生成的Matrix对象后,可以检查其a
或d
属性,以分别查看其根级x和y缩放系数。
答案 2 :(得分:0)
您可以使用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].@color, size);
square.name = squaresXml.square[i].@name;
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
对象,用于定义舞台上显示对象的边界矩形”。