Форум 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=203011)

Fogflasher 26.08.2013 14:39

Конструктор: повторный вызов
 
Допустим есть класс Main с конструктором Main() и рядом методов.

1. Можно ли изнутри одного из методов запустить конструктор Main() повторно?

2. Если даже это технически возможно, будет ли это правильно, делается ли такое?

belv 26.08.2013 15:04

Правильнее написать в конструкторе вызов метода init();(какое имя дадите), в этом методе выполняйте все действия, которые хотели выполнить в конструкторе.Для повторного выполнения Вам просто нужно будет вызвать этот метод init();

Fogflasher 26.08.2013 15:20

Понятно, спасибо. Это было слишком просто, чтобы сразу сообразить.

Но, выходит, что нет функции, навроде Main(), или аналога super(), в арсенале стандартных средств.
Следовательно, по канону предполагается, что ход исполнения, выйдя из конструктра один раз, уже не должен возвращаться обратно.

belv 26.08.2013 15:33

Конструктор главного класса, выполняется только один раз автоматически, при запуске программы.Да и как в принципе любого другого класса, когда Вы создаете экземпляр этого класса.Второй раз его вызвать нельзя.
super(); используется для вызова конструктора своего суперкласса(предка).

Fogflasher 26.08.2013 15:49

Ну вот простой пример, я написал тестовую микро-программку, вызывающую мувики по нажатию кнопок.
Все это сделано в одном классе Main() который является документ-классом.
Конструктор содержит только методы, которые запускают всё остальное.
Есть также метод, который по таймеру вызывает завершение программки.

И вот я хочу сделать нечто вроде Запустить снова? (Да/Нет), но для этого, мне вроде как нужно запускать заново весь код.
То есть, рассуждая по-нубовски, тупо перезапустить конструктор (по нажатию "Да").

Можно конешно сделать так, как посоветовал belv, общую функцию в конструктор добавить.
И её запускать по нажатию кнопки. Так, в данном случае наверное проще всего получится.

Но как это сделать, создав некий сторонний класс... Я не особо представляю.

Не подскажите в общих чертах?

Или надо было такие вещи как запуск, перезапуск, выход, в Main-классе и задавать, а логику исполнения программы в отдельных.

Fogflasher 26.08.2013 16:25

okouser, спасибо за наводку, поразбираю тему интерфейсов.
Ну, я во флэш идэ работаю, не во флексе.

КорДум 26.08.2013 16:36

Цитата:

Сделайте интерфейс вида
Интерфейс ради интерфейса? Здесь он не нужен.

Fogflasher 26.08.2013 16:52

КорДум, а как еще можно?

KumoKairo 26.08.2013 17:07

Плохой тон писать в кадрах, но еще хуже создавать интерфейс просто чтобы заставить какой-либо класс реализовать определенные методы.
У вас было:
Код AS3:

public function Main()
{
        var myLittleSprite:Sprite = new Sprite();
        addChild(myLittleSprite);
}

Станет
Код AS3:

public function Main()
{
        init();
}
 
private function init():void
{
        while (numChildren > 0) {
                removeChildAt(0);
        }
        var myLittleSprite:Sprite = new Sprite();
        addChild(myLittleSprite);
}

Какие интерфейсы?

Цитата:

А что есть "флэш идэ"?!
Под флеш ИДЕ обычно понимают Флеш Про. Да, ту самую визуальную среду разработки

Akopalipsis 26.08.2013 17:15

Цитата:

сотней подпроектов и с тысячами классов
Неужели не понятно, что автору далековато ещё до интерфейсов? Если он даже не знает, как создать и использовать сторонний класс, то зачем ему говорить об итерфейсах?
Автору - вы разбейте логику на классы, начните с двух, Main и YourClass. В главном классе Main сделайте кнопки, которые будут создаваться при запуске программы. По нажатию на кнопку создавайте новый экземпляр класса YourClass, но сделайте проверку на раннее созданные экземпляры как выше.
Когда у вас получится, то начните с создания классов кнопок, то есть вынесете их в отдельные классы и создавайте потом их экземпляры. Но создавайте их не в Main, а сделайте ещё один класс ( главный класс вашего приложения ), который будет добавляться в Main. и так по нарастающей...


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

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