繁体   English   中英

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

[英]Flex/AS3: changing width/height doesn't affect contents

我以为我可以控制AS3,DisplayObjectContainers等,但这基本使我感到困惑:更改sprite的宽度/高度不会影响其视觉内容-在其中绘制的图形或它可能具有的任何子级。

我四处搜寻,找到了一个代表我自己的小测试代码的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);
}

如果我正确理解代码; 您正在更改子画面的宽度/高度。 但是,您没有做任何改变精灵子对象的宽度/高度的操作。

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

我相信这些方法都是特定于Flex的,并且依赖于Flex Framework。 据我所知,通用Sprite不会自动将其大小调整为其父容器的百分比。 并且更改父级不会自动调整父级子级的大小。

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

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

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

C:\\ flex \\ flex_sdk_4.1 \\ frameworks \\ projects \\ spark \\ src \\ spark \\ core \\ 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();
}

因此,您不能期望组件会自动缩放。

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

自定义组件示例-wonderfl在线构建Flash

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM