2014-01-31 94 views
0

我想創建一個繪製矩形並將其添加到舞臺上的單獨類,但問題是當我嘗試從類本身做到這一點時,階段。將movieclip添加到舞臺上的子類

我的設置如下:

Main.fla具有文檔類Main.as:

package 
{ 
import flash.display.Sprite; 
import Window; 
public class Main extends Sprite 
{ 

    public function Main():void 
    { 
     var newWindow:Window = new Window(); 

    } 

} 

} 

在影片剪輯isadded

package { 

import flash.display.MovieClip; 
import flash.display.Sprite; 

public class Window extends Sprite { 

    public function Window(x:Number= 0, y:Number= 0, width:Number = 100, height:Number=100,title:String="Window"):void { 
     var newWindow:MovieClip = new MovieClip(); 
     addChild(newWindow); 
     newWindow.graphics.beginFill(0xFF9966, 1); 
     newWindow.graphics.drawRect(x, y, width, height); 
     trace("Instance created");  
     } 
    } 
} 
+0

我沒有看到當前發佈代碼的問題。你嘗試添加'newWindow'而不是'this'而失敗嗎? :) – Vesper

+0

當我嘗試將其添加到階段我得到以下錯誤 'TypeError:錯誤#1009:無法訪問空對象引用的屬性或方法。' – RootOfMinusOne

+0

當你第一次創建一個類實例的階段'屬性爲空。只有文檔類可以訪問階段。你最好使用'this.addChild(xxx)'而不是添加到舞臺上,因爲在某些情況下你的SWF可能被嵌入到另一個舞臺中,然後無論如何你都不會得到合適的舞臺。此外,添加到'這個'會幫助你管理你的窗戶。 – Vesper

回答

0

是的,你不能訪問類stage來自新創建的對象,因爲它不知道舞臺存在。你可以在那裏添加一個孩子的唯一的東西是this。但是,如果將對象正確嵌入容器中,則可以瞬間完成更強大的功能,例如通過容器的xy屬性的單個賦值來移動複雜的窗口。所以,你需要做的事情是在你的主課堂中的addChild(newWindow)

package 
{ 
import flash.display.Sprite; 
import Window; 
public class Main extends Sprite 
{ 

    public function Main() 
    { 
     var newWindow:Window = new Window(); 
     addChild(newWindow); // THIS 
     // also here you can do "newWindow.x=100;" for example 
    } 

} 

} 
+0

當我從文檔類中添加它時,它工作正常,但我有點困惑,但是當我第一次從Window類添加MovieClip時,新創建的MovieClip沒有添加到舞臺顯示列表中?因爲它沒有呈現?爲什麼?我試圖使用'this'它沒有奏效。對不起,如果我可能看起來很笨,但我剛開始學習as3,所以忍受着我 – RootOfMinusOne

+0

是的,因爲你必須首先將'this'添加到舞臺顯示列表。看到,顯示列表的層次結構從舞臺開始,並且嵌入的深度與構建它時一樣深。你的情況看起來像'stage - > newWindow(Window) - > newWindow(MovieClip)'。看,這些'newWindow's是兩個不同的對象。您已經通過'Window'類構造函數中的'addChild(newWindow)'完成了構建第二個箭頭的操作,但是直到第一個箭頭沒有構建完成,'newWindow'的矩形纔會顯示,因爲'stage'沒有意識到新的創建MCs。 – Vesper

+0

我明白了,非常感謝。 – RootOfMinusOne

相關問題