我认为我对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);
}
答案 0 :(得分:0)
如果我正确理解了代码;你正在改变精灵的宽度/高度。但你没有做任何改变精灵的孩子的宽度/高度。
在Flex应用程序的上下文中,您可以对子项使用percentageWidth和percentageHeight来调整父级的大小。您还可以为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