2012-01-09 2 views
0

Вопрос: Я хочу знать, почему мне нужно добавить addChild как для моего класса документа, так и для внешнего класса, чтобы мой видеоклип с кликом, который я правильно связал с моей библиотекой, чтобы появиться на сцене , Если я удалю addchild из любого класса, код завершится с ошибкой. Код работает, и я получаю необходимое количество экземпляров, но я не совсем понимаю, почему. То, что я хотел сделать, это просто передать количество экземпляров класса scoreBoard, которое я хотел для класса ScoreBoard contructor, и создать экземпляры x, используя цикл for во внешнем классе ScoreBoard. Вместо этого я был вынужден сделать цикл for из класса документа. Любая помощь приветствуется.Нужна помощь в понимании метода AddChild

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

ответ

1

addChild() добавляет ребенка в список отображения родительского объекта. Если я правильно прочитал, приведенный выше код делает отношения следующим образом:

Base.ScoreBoard.teamScoreBoard 

teamScoreBoard должны быть добавлены к ScoreBoard или ScoreBoard будет пустым. ScoreBoard должны быть добавлены в базы или базы будет пуста, и т.д ...

__

Если Вы желаете отношения, как:

stage.ScoreBoard.teamScoreBoard 

В вашем базовом классе вместо addChild(s); вы можете попробуйте stage.addChild(s);

или объявите свои команды var teamScoreBoards внутри цикла (внутри вашего конструктора), в пределах цикла добавьте их в Scoreboard, что-то вроде: (непроверенный код)

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); 
    } 
} 

Кроме того вы можете добавить их в корзину, если вам нужно с ним снова связаться.

__

Если я избегаю интерпретировать ваш вопрос, дайте мне знать.