2012-01-09 2 views
0

Question: Je veux savoir pourquoi je dois ajouter un addChild à ma classe de document et à la classe externe pour que mon clip de scoreBoard que j'ai correctement lié depuis ma bibliothèque apparaisse sur la scène . Si je supprime l'addchild de l'une ou l'autre classe, le code échoue. Le code fonctionne et j'obtiens le bon nombre de cas mais je ne comprends pas très bien pourquoi. Ce que je voulais faire, c'était simplement passer le nombre d'instances de la classe scoreBoard que je voulais à la classe ScoreBoard et créer des instances x en utilisant une boucle for dans la classe ScoreBoard externe. Au lieu de cela, j'ai été forcé de faire la boucle for de la classe de document. Toute aide est appréciée.Besoin d'aide pour comprendre AddChild Method

/*This is my Document Class*/ 

package { 
import flash.events.Event; 
import flash.events.MouseEvent; 
import flash.display.*;// Import statement(s) 
import flash.display.Stage; 

//creates the 5 instances of my scoreBoard 
public class Base extends MovieClip { 

    // Class Constructor 
    public function Base() { 

     //create an object of our ship from the Ship class 

     //add it to the display list 
     for(var cnti:int = 0; cnti< 5; cnti++){ 
     //var myScoreBoard:ScoreBoard = new ScoreBoard(); 
     var s = new ScoreBoard; 
     addChild(s);} 
    } 
    private function init() { 

    } 
} 
} 


/*This is my external class */ 
package { 
     /*++++++++++++++ 
     last modified 1/6/2010 
     class creates the scoreboard 
     */ 

     import flash.display.MovieClip; 
     import flash.events.Event; 
     import flash.events.MouseEvent; 

     //the class 
     public class ScoreBoard extends MovieClip 
     { 
      private static var score = 0; 
      private static var curRow = 0; 
      private static var teamCounter = 0; 
      private static var teamScoreArray = new Array(); 

      var teamScoreBoard:MovieClip = new teamScore(); //decalre the name property 

      //the constructor 
      public function ScoreBoard() 
      { //makes instance of the class 


       teamScoreBoard.teamName.text = "Team "+[teamCounter+1]; 
       teamScoreBoard.name = "Team "+[teamCounter+1]; 
       teamScoreBoard.score.text = score; 
       teamScoreBoard.x = getXCoord(); 
       teamScoreBoard.y = getYCoord(teamCounter); 
       trace(teamCounter); 
       teamScoreBoard.plus.addEventListener(MouseEvent.CLICK, plusBtnClickHandler); 
       teamScoreBoard.minus.addEventListener(MouseEvent.CLICK, minusBtnClickHandler);  
       teamCounter++; 
       this.addChild(teamScoreBoard); 


      }//end contructor 

      private function getXCoord():int 
      { 
       var xCoord:int; 
       xCoord = 100; 
       return xCoord; 
      } 

      private function getYCoord(someNum):int 
      { 
       var yCoord:int; 
       yCoord = 100 + someNum * 85; 
       return yCoord; 
      } 

      private function plusBtnClickHandler(event:MouseEvent):void 
      { 
       //var curRow = 0; 
       var pointValue = getPointValue(0); 
       //incriment the score 
       event.currentTarget.parent.score.text = score += pointValue; 

      } 

      private function minusBtnClickHandler(event:MouseEvent):void 
      { 
       //var curRow = 0; 
       var pointValue = getPointValue(0); 
       //incriment the score 
       //event.currentTarget.parent.score.text = score -= pointValue; 
       event.currentTarget.parent.score.text = score -= pointValue; 
      } 

      private function getPointValue(curRow):int 
      { 
       var pointValue; 
       switch(curRow){ 
        case 0: pointValue = 100; break; 
        case 1: pointValue = 200; break; 
        case 2: pointValue = 300; break; 
        case 3: pointValue = 400; break; 
        default: pointValue = 500; break; 
       } 
       return pointValue; 

      } 

     }//end class 

}//end package 

Répondre

1

addChild() ajoute un enfant à la liste d'affichage d'un objet parent. Si je lis correctement, le code ci-dessus fait une relation comme suit:

Base.ScoreBoard.teamScoreBoard 

teamScoreBoard doit être ajouté à ScoreBoard ou ScoreBoard serait vide. ScoreBoard doit être ajouté à la base ou la base serait emtpy, etc ...

__

Si vous manquez une relation comme:

stage.ScoreBoard.teamScoreBoard 

Dans votre classe de base au lieu de addChild(s); vous pouvez essayez stage.addChild(s);

ou déclarez votre var teamScoreBoards dans une boucle (à l'intérieur de votre constructeur), dans la boucle ajoutez-les à Scoreboard, quelque chose comme: (code non testé)

public function ScoreBoard() { 
    for(var cnti:int = 0; cnti< 5; cnti++){ 
     var teamScoreBoard:MovieClip = new teamScore(); 
     teamScoreBoard.teamName.text = "Team "+[teamCounter+1]; 
     ... 
     teamCounter++; 
     this.addChild(teamScoreBoard); 
    } 
} 

De plus, vous pouvez les ajouter à un vecteur si vous avez besoin d'y accéder à nouveau.

__

Si je manque à votre question interprétais laissez-moi savoir.

Questions connexes