Нужна помощь в понимании метода AddChild - PullRequest
0 голосов
/ 10 января 2012

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

/*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 Ответ

1 голос
/ 10 января 2012

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

Base.ScoreBoard.teamScoreBoard

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

__

Если вы хотите, чтобы отношения типа:

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

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

__

Если я пропустил интерпретированный вопрос, дайте мне знать.

...