2010-03-19 67 views
1

我是ActionScript新手,對addchild函數的工作原理有點困惑。Actionscript 3 Sprite AddChild

我想畫5個房子。每棟房屋都有屋頂和牆壁。每面牆都有一扇門和一扇窗戶。 我有以下類和我這是怎麼劃分他們

class Main 
    class House 
    class Roof //a triangle 
    class Wall //a rectangle 
     class Door //a rectangle 
     class Window //a square 

林具有的類繼承的麻煩。我不能讓牆上的課程顯示出一扇窗戶和一扇門。 有人能指引我走向正確的方向嗎?

更新: 這是我不明白的部分。 我怎麼寫它,以便它相對於牆壁繪製門窗? (使用牆的左上角爲0,0;而不是屏幕)

回答

2

我希望這有助於

// MAIN FLA 
import House; 

var house:House = new House(); 
addChild(house); 


package { 
    import flash.display.Sprite; 
    import Roof; 
    import Wall; 

    public class House extends Sprite { 
     protected var wall:Wall; 
     protected var roof:Roof; 
     function House() { 
      wall = new Wall(); 
      roof = new Roof(); 

      this.addChild(roof); 
      this.addChild(wall); 

      // The wall should be below the roof 
      wall.y = roof.height + roof.y; 

     } 
    } 
} 

package { 
    import flash.display.Sprite; 

    public class Roof extends Sprite { 
     function Roof() { 

     } 
    } 
} 

package { 
    import flash.display.Sprite; 
    import Door; 

    public class Wall extends Sprite { 
     protected var door :Door; 
     function Wall() { 
      door = new Door(true); 
      this.addChild(door); 

      // Door is centered. 
      door.x = (this.width - door.width)/2; 

      // Door is flush with bottom of the wall. 
      door.y = this.height - door.height; 
     } 
    } 
} 

package { 
    import flash.display.Sprite; 
    import Windoe; 

    public class Door extends Sprite { 
     protected var win :Windoe; 
     function Door(hasWindow:Boolean = false) { 
      if(hasWindow) { 
       win = new Windoe(); 
       this.addChild(win); 

       // The window should be centered? 
       win.x = (this.width - win.width)/2; 
       win.y = 20; // Just a guess. 
      } 
     } 
    } 
} 

package { 
    import flash.display.Sprite; 

    // The word Window may be reserved, so using Windoe just to be safe 
    public class Windoe extends Sprite { 
     function Windoe() { 

     } 
    } 
} 
2

對象不會自動添加到顯示列表(顯示在屏幕上),要做到這一點,您可以使用addChild()addChildAt()(用於指定深度)。

你想要的這裏大概是一些看起來像這樣(如果你想單獨班):

類窗/門/屋頂希望僅僅是精靈的構造函數:

package { 
    import flash.display.Sprite; 

    public class Window extends Sprite{ 
     public function Window() { 

     } 
    } 
} 

華爾街希望添加一些孩子。

package { 
    import flash.display.Sprite; 

    public class Wall extends Sprite { 

     private var door:Door; 
     private var window:Window; 

     public function Wall() { 
      //Instance the objects 
      //This creates a reference but they will not render on screen 
      door = new Door(); 
      window = new Window(); 

      //Position objects here 

      //Add them to displaylist 
      addChild(door); 
      addChild(window); 

     } 
    } 
} 

房子然後想要以相同的方式添加屋頂和牆壁。 請注意,因爲您在本例中首先添加了門,所以如果有任何重疊,它將出現在窗口後面。 然後,您的主類將爲5個House實例創建並使用addChild()。

+0

這是我不理解的部分。 我怎麼寫它,以便它相對於牆壁繪製門窗? (使用牆的左上角爲0,0;而不是屏幕) – Amy 2010-03-19 15:10:06

+0

沒有區別,但它可以幫助您更好地形象化,如果您使用this.addChild(door)和this.addChild(window) – Sandro 2010-03-19 16:43:21

+0

public function House(){addChild(roof); addChild(wall);} 這是正確的嗎?我現在得到一個空白的屏幕。我認爲這與訂購有關。如此迷茫。 – Amy 2010-03-19 17:20:13

1

它不會是自動的每一個視覺的物品具有x和y cordinate和那裏所有chilrens X,Y 0,0 cordinates從換句話說,父母開始,如果你把

門在:

door.x = 200; 
door.y = 100; 

你給它會繼承其位置,所以如果你只是對子級的例子的窗口中添加門

door.addChild(window); 

窗口會坐在ontop的的任何兒童你仍然可以用它的x,y座標移動它,但是它相對於那扇門,因爲它的孩子。

+0

不應該是window.addChild(門); – Amy 2010-03-19 16:20:48

+0

如何爲窗戶添加門? :) – Sandro 2010-03-19 16:41:20

+0

我的意思是wall.addChild(門):) – Amy 2010-03-19 17:17:03