2010-07-13 56 views
0

我以为我有AS3,DisplayObjectContainers等的句柄,但这个基本的东西真的让我困惑:改变精灵的宽度/高度并不影响它视觉内容 - 绘制在其中的图形或其可能具有的任何儿童。Flex/AS3:改变宽度/高度不影响内容

我搜索了四周,发现代表我自己的小测试代码的Adobe页面。从那个页面上我可以预料,随着宽度的增加,精灵的视觉尺寸会增加。对我而言,事实并非如此。 (http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/display/DisplayObject.html#width

宽度属性
width:Number [读写]

指示显示对象的宽度,以像素为单位。宽度是根据显示对象内容的边界计算的。当设置了宽度属性,则scaleX属性会相应调整,如图以下代码:

下面我的代码不影响视觉显示在所有 - 但它确实设置宽度/高度,在至少根据跟踪输出。它不会影响scaleX/scaleY

我在这里错过了什么?

我的设置代码:

testSprite = new SpriteVisualElement(); 

var childSprite:SpriteVisualElement = new SpriteVisualElement(); 
childSprite.graphics.beginFill(0xFFFF00, 1); 
childSprite.graphics.drawRect(0, 0, 200, 100); 
childSprite.graphics.endFill(); 
childSprite.name = "child"; 

testSprite.addChild(childSprite); 

container.addElement(testSprite); 
testSprite.addEventListener(MouseEvent.CLICK, grow); 
} 


public function grow(event:MouseEvent):void 
{ 
event.target.width += 5; 
event.target.height += 5; 
trace("grow", event.target.width); 
} 

回答

0

如果我理解正确的代码;你正在改变精灵的宽度/高度。但是你没有做任何改变精灵的孩子的宽度/高度。

在Flex应用程序的上下文中,您可以使用子项上的percentageWidthpercentageHeight在父级调整大小时调整子级的大小。您还可以将侦听器添加到resize事件中并调整大小,最好以某种方式绑定到Flex Component LifeCycle方法。

我相信这些方法都是Flex特有的,并且依赖于Flex框架。按照我的理解,通用精灵不会自动调整其父容器的百分比;并且改变父母不会自动调整父母的孩子。

我敢打赌,像这样的工作:

public function grow(event:MouseEvent):void 
{ 
event.target.width += 5; 
event.target.height += 5; 
childSprite.width += 5; 
childSprite.height += 5; 
trace("grow", event.target.width); 
} 
0

首先,如果你有一个Flex组件有问题,你可以查看其源代码。在我的环境中(当我将flex SDK安装到C:\ flex \ flex_sdk_4.1)时,SpriteVisualElement的源代码位于:

C:\ flex \ flex_sdk_4.1 \ frameworks \ projects \ spark \ src \火花\核心\ SpriteVisualElement.as

在源代码中,你会发现,width属性覆盖:

/** 
* @private 
*/ 
override public function set width(value:Number):void 
{ 
    // Apply to the current actual size 
    _width = value; 
    setActualSize(_width, _height); 

    // Modify the explicit width 
    if (_explicitWidth == value) 
     return; 

    _explicitWidth = value; 
    invalidateParentSizeAndDisplayList(); 
} 

所以,你不能指望组件的自动缩放。

制作自定义组件将是一个解决方案。 以下是自定义组件的示例实现。

Custom Component Example - wonderfl build flash online