2010-08-14 22 views
0

好吧我試圖繪製一個框與動作3和flex 3.5。首先幾件事情:試圖學習actionscript/flex,試圖繪製一個沒有mxml的盒子

1)我沒有使用任何IDE所有,只是記事本,我沒有使用在所有的任何MXML文件彎曲 2)(是的,這是可能的AS3顯然) 3)我不使用繼承,即我沒有使用我的類的擴展,我試圖讓這個特定的代碼位只能通過合成工作

無論如何,這是代碼本身(文件名是MAIN.as) :

package 
{ 
    import flash.display.*;  
    import mx.core.Application;  
    import flash.events.*;  
    import mx.collections.*; 
    import flash.geom.*;   
    import mx.controls.*; 
    import flash.text.*;   
    import mx.events.*; 
    import mx.styles.*; 

    public class MAIN 
    { 
     public var APPLICATION:Application = Application(Application.application); 
     public function MAIN() 
     { 
      APPLICATION.layout = 'absolute'; 
      var BOX:Sprite = new Sprite(); 
      BOX.graphics.beginFill(0xFF0000,1); 
      BOX.graphics.drawRect(0,0,400,400); 
      BOX.graphics.endFill(); 
      APPLICATION.addChild(BOX); 
     } 
    } 
} 

它編譯得很好,但沒有顯示任何東西。我應該看到一個紅色的盒子,但現在我看到的只是一個空白的屏幕。我已經通過使用類MAIN extends Sprite得到了這個工作,然後一起擺脫了box變量,但是我想避免使用extends命令。對不起,這些進口產品在帖子裏有些sm,,但它們與問題無關,儘管它並不重要。

+1

如果沒有至少將Main類擴展到MovieClip或Sprite,則無法做到這一點。即使您以這種方式調用Application類(我懷疑可以工作),您將不得不將其添加到顯示列表中。 – PatrickS 2010-08-14 01:53:10

+0

你提到你沒有使用MXML,但是你正在使用Flex類(mx命名空間)。如果你想避免使用Flex,你不能使用mx命名空間。應用程序類是flex的一部分。 – Newtang 2010-08-15 23:50:19

回答

0

使用addChild時,Flex組件(如Application,List,Canvas等)只能將其他Flex組件添加爲子組件。如果你想添加一個原始的AS3原始像形狀,雪碧,Movieclip,你必須做[FLEX COMPONENT HERE].rawChildren.addChild(BOX);或在你的情況下APPLICATION.rawChildren.addChild(BOX);

0

我認爲你應該擴展雪碧,如果這是你的主類。其次,我不是Flex的專家,但是我認爲如果你沒有正確地初始化框架,你不能真正使用大部分的Flex類。我一直看到這使用mxml完成​​。可能有一種方法只使用Actionscript來做到這一點,但我沒有看到這一點。如果你想使用Application和其他Flex的東西,使你的入口點是一個mxml文件。否則,只需使用純動作腳本。

PS:剛剛閱讀,你已經知道你的代碼擴展雪碧。但是,無論您對繼承或組合的偏好如何,爲了使您的盒子可見,必須在某個時刻將其附加到顯示列表中。所以,你有一個雪碧,並吸引了它。但是你仍然需要將它添加到顯示列表中才能看到它。要將顯示對象添加到顯示列表中,您需要對某個顯示對象容器的引用。如果你擴展Sprite,你的課程將是1)一個容器和2)將被附加到顯示列表。你的主類至少應該是一個雪碧。我想這裏你沒有太多的選擇。

0

Document Class是您進入舞臺的ActionScript入口點。您的Document Class對象的一個​​實例存在並可表示爲顯示列表中任何對象的「根」屬性。 DisplayObject類的根屬性必須返回DisplayObject,其定義如下:

對於加載的SWF文件中的顯示對象,根屬性是顯示列表樹結構部分中最頂端的顯示對象由該SWF文件表示。

因此,您的文檔類 - 必須是DisplayObject,以便在舞臺上顯示任何內容,而不管是否使用合成。

關於Flex組件,不需要任何對mx.core的引用。應用程序或任何其他Halo組件(如果主要AS文件從DisplayObject擴展而來)(Sprite,除非涉及Flash CS * Professional中包含需要在幀中引用的時間軸的對象,否則MovieClip沒有用處),則您仍然可以創建BOX:Sprite並將其添加到文檔類的顯示列表中

this.addChild(BOX);

而且一切都會奏效。