Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   В конструктор без рекурсии передать переменную в которой хранится экземпляр класса (http://www.flasher.ru/forum/showthread.php?t=176029)

Михаил Свинцов 29.02.2012 16:30

В конструктор без рекурсии передать переменную в которой хранится экземпляр класса
 
как в конструктор без рекурсии передать переменную в которой хранится экземпляр класса . Сама эта переменная хранится в другом классе. Здесь у меня вообще бардак т.к. я уже всяко пробовал делать. Первый класс - основной. Подскажите пожалуйста выход из этой ситуации. да и сразу предупреждаю не осуждать большое кол-во параметров в конструкторе CreateButton(это для тех кто такое не любит, а мне так удобно).

Код AS3:

package p {
        import flash.display.*;
        import flash.net.*;
        import flash.events.*;
        import flash.text.*;
        import flash.display.Sprite;
    public class Application extends MovieClip {
            public function Application() {
                        trace("Конструктор основного класса Application");   
                        addChild(_panel);    //Надо как-то соответствующе обращаться к
                        addChild(_glav0);    //этим переменным(они принадлежат классу Ref)
                }
        }
}

Код AS3:

package p{
        import flash.display.*;
        import flash.net.*;
        import flash.events.*;
        import flash.text.*;
        import flash.display.Sprite;
 
        public class Panel extends Sprite {
                public function Panel() {
                        addChild(new CreateButton("Главная", 13,  0x000000, "Times New Roman", true,
                                                                          false, 0, 0, 100, 20, TextFieldAutoSize.NONE,
                                                                          TextFormatAlign.CENTER, true, 0xdf6415, true, 0x000000,
                                                                          true, _glav0)); // Здесь тоже.
                }
        }
}

Код AS3:

package p {                
        import flash.display.*;
        import flash.net.*;
        import flash.events.*;
        import flash.text.*;
        import flash.display.Sprite;
 
        public class Glava0 extends Sprite {
                private var biology;
                private var ch1;
                public function Glava0() {
                        trace("Класс-контейнер для содержимого Главной страницы - Glava0");
                        biology = new CreateButton('Интерактивный\n курс\n\n "Биология\n\n 8 класс"',
                                                                          28, 0x00ff00, "Segoe Print", true, false, 90, 40,
                                                                          100, 100, TextFieldAutoSize.CENTER,
                                                                          TextFormatAlign.CENTER, false, null, false, null,
                                                                          false, null);
                        addChild(biology);
                        ch1 = new CreateButton("Организм человека. Общий обзор", 14, 0x0000ff, "Segoe Print",
                                                                  true, false, 280, 40, 100, 100, TextFieldAutoSize.LEFT,
                                                                  TextFormatAlign.LEFT, false, null, false, null, true,
                                                                  _glav1); // И здесь
                        addChild(ch1);
                }
        }
}

Код AS3:

package p {
        import flash.display.*;
        import flash.net.*;
        import flash.events.*;
        import flash.text.*;
        import flash.display.Sprite;
        import flash.display.DisplayObjectContainer;
 
        public class CreateButton extends Sprite {
                private var txt:TextField = new TextField();
                private var format:TextFormat;
                private var psize;
                private var pchild;
 
 
                public function CreateButton(ptext:String, size:uint, color:Object, font:String,
                                                                        bold:Boolean, italic:Boolean, xpos:uint, ypos:uint,
                                                                        wid:uint, heig:uint, autosize, align, back:Boolean,
                                                                        backcolor, bord:Boolean, bordcolor, mouse:Boolean,
                                                                        child) {
                        // Я выпустил ненужную часть кода
                        txt.addEventListener(MouseEvent.CLICK, clickListener);
                        txt.addEventListener(MouseEvent.MOUSE_OVER, overListener);
                        txt.addEventListener(MouseEvent.MOUSE_DOWN, downListener);
                }
 
                private function clickListener(e:MouseEvent):void {
                        format.size = psize;
                        txt.setTextFormat(format);
                        removechild();                        // Вот здесь я попытался сделать рекурсивную функцию, которая удаляет все с экрана. По этому поводу тоже жду критики.
                        addChild(_panel);      // Здесь тоже надо как-то обратиться к переменной правильно
                        addChild(this.pchild);
                }
                private function overListener(e:MouseEvent):void {
                          txt.setTextFormat(format);
                }
                private function downListener(e:MouseEvent):void {
                        format.size = psize+1;
                        txt.setTextFormat(format);
                }
                private function removechild() {
                        removeChildAt(0);
                        if(numChildren == 0) {
                                return;
                        }
                        removechild();
                }
        }
}


mooncar 29.02.2012 16:37

Михаил Свинцов, название темы должно раскрывать суть вопроса.

Михаил Свинцов 29.02.2012 16:40

ок простите

КорДум 29.02.2012 16:54

Слишком много лишнего кода. Кроме того, вопрос намекает на то, что у Вас что-то не лады с архитектурой.
Но отвечу по вопросу псевдокодом:
Код AS3:

public function MyClass(obj:MyClass = null) {
    if (obj)
        _obj = obj;
}
 
var obj1:MyClass = new MyClass();
var obj2:MyClass = new MyClass(obj1);

Вот как-то так. Кажется, я верно в голове логику выстроил. И вроде бы верно понял вопрос.


Часовой пояс GMT +4, время: 04:08.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.