Flex / AS3:更改宽度/高度不会影响内容

时间:2010-07-13 12:19:26

标签: flex actionscript-3

我认为我对AS3,DisplayObjectContainers等有了处理,但这个基本的东西让我感到困惑:更改精灵的宽度/高度不会影响它的视觉内容 - 无论是在其中绘制的图形还是其中的任何子图形有

我搜索了一下,找到了一个代表我自己的小测试代码的Adobe页面。从那个页面,我希望精灵随着宽度的增加而增加视觉尺寸。对我来说,事实并非如此。 (http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/display/DisplayObject.html#width

  

宽度属性
  width:Number [读写]

     

指示显示对象的宽度(以像素为单位)。基于显示对象的内容的边界来计算宽度。设置width属性时,会相应地调整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);
}

2 个答案:

答案 0 :(得分:0)

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

在Flex应用程序的上下文中,您可以对子项使用percentageWidthpercentageHeight来调整父级的大小。您还可以为resize事件添加一个侦听器,并以此方式调整大小;最好以某种方式插入Flex Component LifeCycle方法。

我相信这些方法都是特定于Flex的,并且依赖于Flex Framework。根据我的理解,Generic Sprites不会自动调整其父容器的百分比大小;并且更改父级不会自动调整父级子级的大小。

我打赌这样的事情会起作用:

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);
}

答案 1 :(得分:0)

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

C:\挠曲\ flex_sdk_4.1 \框架\项目\火花\ 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