2010-07-13 58 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