2010-03-19 8 views
1

Im nouveau à actionscript 3 et suis un peu confus sur la façon dont fonctionne la fonction addchild.Actionscript 3 Sprite AddChild

Je veux dessiner 5 maisons. chaque maison a un toit et un mur. Chaque mur a une porte et une fenêtre. Je les classes suivantes et voici comment je les ai regroupé

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

Im ayant des problèmes avec l'héritage des classes. Je ne peux pas faire apparaître la classe de mur avec une fenêtre et une porte. Est-ce que quelqu'un peut me diriger dans la bonne direction?

MISE À JOUR: Ceci est la partie que je ne comprends pas. Comment puis-je l'écrire pour qu'il dessine la porte et la fenêtre par rapport au mur? (utiliser le coin supérieur gauche du mur comme 0,0, au lieu de l'écran)

Répondre

2

J'espère que cette aide

// 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

Les objets ne sont pas ajoutés automatiquement à la liste d'affichage (affichés à l'écran), pour ce faire, utilisez le addChild() ou le addChildAt() (pour spécifier un profondeur).

ce que vous voulez ici est sans doute quelque chose qui ressemble à ceci (si vous voulez des classes séparées):

classe de fenêtre/porte/toit veulent être juste constructeurs sprite:

package { 
    import flash.display.Sprite; 

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

     } 
    } 
} 

mur veut ajouter des enfants. La maison veut alors ajouter un toit et un mur de la même manière. Notez que parce que vous avez ajouté la porte en premier dans cet exemple, il apparaîtra derrière la fenêtre s'il y a un chevauchement. votre classe principale créera et utilisera ensuite addChild() pour les 5 instances de House.

+0

Ceci est la partie que je ne comprends pas. Comment puis-je l'écrire pour qu'il dessine la porte et la fenêtre par rapport au mur? (utilisez le coin supérieur gauche du mur comme 0,0, au lieu de l'écran) – Amy

+0

Cela ne fait aucune différence, mais cela peut vous aider à mieux visualiser ceci si vous utilisez this.addChild (door) et this.addChild (window) – Sandro

+0

public function House() {addChild (toit); addChild (wall);} Est-ce vrai? Je reçois un écran vide maintenant. Je pense que cela a à voir avec la commande. tellement confus. – Amy

1

il ne serait pas automatique chaque élément visuel a x et y cordinate et tout ce qu'il ya chilrens x, y cordinates 0,0 commencent par le parent autrement dit si vous mettez

la porte:

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

tout enfant que vous donnez à hériterait sa position si vous whould juste pour l'exemple ajouter la fenêtre à la porte

door.addChild(window); 

la fenêtre s'asseyait ontop du porte vous pouvez toujours le déplacer avec ses coordonnées x, y mais c'est par rapport à cette porte car c'est son enfant.

+0

ne devrait-il pas être window.addChild (porte); – Amy

+0

Comment pouvez-vous ajouter une porte à une fenêtre? :) – Sandro

+0

je veux dire wall.addChild (porte) :) – Amy