2010-03-19 6 views
1

새로운 ActionScript 3.0에 익숙해졌으며 addchild 기능이 어떻게 작동하는지 약간 혼란 스럽습니다.액션 스크립트 3 스프라이트 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

또는 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 하우스 인스턴스에 대해 addChild()를 만들고 사용합니다.

+0

도움이되기를 바랍니다. 벽에 상대적으로 문과 창문을 그릴 수 있도록 작성하려면 어떻게해야합니까? (벽의 왼쪽 상단 모서리를 화면 대신 0,0으로 사용) – Amy

+0

차이는 없지만 this.addChild (문) 및 this.addChild (창) – Sandro

+0

공용 함수를 사용하면 더 효과적으로 시각화하는 데 도움이 될 수 있습니다. 집() {addChild (지붕); addChild (wall);} 이게 맞습니까? 나는 지금 빈 화면을 얻는다. 나는 그것이 주문과 관련이 있다고 생각한다. 그래서 혼란스러워. – Amy

1

당신이에

문을 넣으면 0,0 좌표, 다른 말로 부모로부터 시작 Y는 모든 시각적 항목이 x와 y, 중간막 모두가 chilrens의 X를 가지고 자동으로되지 않을 것 :

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

당신이 방금 예를 들어 윈도우가의 ontop을 앉아 것 문

door.addChild(window); 

에 창을 추가 whould 그래서 만약 위치를 상속 할 그에게 줄 어떤 아이 문은 x, y 좌표로 계속 움직일 수 있지만 자식이 있기 때문에 문에 상대적입니다.

+0

이 아니어야합니다. window.addChild (door); – Amy

+0

창문을 어떻게 추가 할 수 있습니까? :) – Sandro

+0

나는 벽을 의미합니다. addChild (문) :) – Amy

관련 문제