Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.08.2013, 19:35
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 11  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Цитата:
Вот будете работать с проектами с сотней подпроектов и с тысячами классов
Уйдите от критических абстракций и вернитесь в топик к нашему новичку. Не надо демагогии, прошу. Форум от нее устал.

Использование интерфейса должно быть оправдано. В данном случае он пригодился бы, если бы эту swf загружали лоадером в другую в дочерний аппдомен. Вот тогда интерфейс будет нужен в данном конкретном случае. Вдумайтесь в само слово "интерфейс".
__________________
тут я

Старый 26.08.2013, 19:54
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 12  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Цитата:
Если же имеете в виду пример ТС, то действительно никакие интерфейсы ему сейчас не нужны. Просто он заговорил об отдельной логике, о документах, вот я и подумал привести такой пример.
Ему не нужно было "отдельной логике", ему нужен был конкретный пример реализации без всяких внешних классов


Последний раз редактировалось KumoKairo; 26.08.2013 в 20:06.
Старый 26.08.2013, 20:39
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 13  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Я уверен что вы реально не хотите то что просите, но вообще говоря есть у меня тут... Там показано как дёргать конструкторы много раз. Но повторюсь, бойтесь своих желаний, они имеют свойство сбываться.
И, да, так делать нельзя, неправильно, криво и костыльно. Иногда про такое лучше не знать, но раз просили
__________________
:)

Старый 27.08.2013, 11:39
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 14  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Прочитал камменты.
Складывается впечатление, что лучше не учится плохому, и такой подход не использовать.

Ок, будем пробовать по совету Apokalipsis, разбить Main() на кучу классов.

Старый 27.08.2013, 11:42
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 15  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Цитата:
Ок, будем пробовать по совету Apokalipsis, разбить Main() на кучу классов.
Каких классов?
Я же скинул пример без доп классов с одним единственным доп методом)

Старый 27.08.2013, 11:51
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 16  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
KumoKairo, ну это метод который belv посоветовал, с повторным вызовом функции init() вместо конструктора, если я правильно понял вашу мысль.

Ну, тут ниже вроде как выясняется, что это тоже зло, и "вообще так нельзя" : )

Хотя, разумеется, я и так попробую.

Старый 27.08.2013, 11:55
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 17  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Этот метод не будет работать только в том случае, если вам ну очень нужно использовать конструктор суперкласса.
Если хочется сделать полный вайп "программы" и перезапуск, просто перенесите весь логический код (создание кнопок, добавление на экран и прочее) из вашего в Main в SubMain и просто пересоздавайте этот объект SubMain
При этом ничего городить с "кучей классов" и интерфейсами не нужно совершенно

Цитата:
Ну, тут ниже вроде как выясняется, что это тоже зло, и "вообще так нельзя" : )
Вы что-то путаете

Старый 27.08.2013, 12:02
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 18  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Цитата:
Ну, тут ниже вроде как выясняется, что это тоже зло, и "вообще так нельзя" : )
Иметь метод restart (или dispose/init) не является плохим тоном. Если Вам это потребовалось, делайте. Смысл dispose-части метода (или отдельного метода) в том, чтобы уничтожить все, что было ранее создано, отписаться от событий и обнулить все ссылки-переменные. То есть привести все к точно такому же виду, как при запуске флешки. В ините же должна происходить вся начальная инициализация. Именно она произойдет при вызове этого метода в конструкторе и отдельно. Конечно же, то, что не нужно уничтожать, оставляйте, тогда в ините нужно будет сделать соответствующие проверки, чтобы оно не создавалось заново. И это не отдельные классы, это просто методы у всего, что нужно.

Давайте рассмотрим на примере: у нас есть некая игра, допустим аэрохоккей. В нем участвуют для простоты три различных объекта: это табло с очками, оппонент и свой игрок. Требуется начать игру заново. Пересоздавать игровое поле и табло нам не нужно, поэтому смело их оставляем. Однако, у табло нужно вызвать соответствующий метод, который бы обнулил очки. Далее, оппонент и свой игрок. Их совсем удалять не следует, а вот остановить логику выполнения, чтобы оппонент перестал играть, а свой игрок реагировать на мышь, нужно.
В итоге в init мы имеем проверки: если оппонент создан, то запускаем логику. Если свой игрок создан, то запускаем логику. Если табло создано, то ничего не делаем.

Немножко псевдокода:
Код AS3:
private function restart():void {
    dispose();
    init();
}
 
private function dispose():void {
    _scoreboard.restart();
 
    // останавливаем логику
    _enemyPlayer.stop();
    // очищаем, если что-либо нужно очистить
    _enemyPlayer.dispose();
 
    // останавливаем логику
    _selfPlayer.stop();
    // очищаем, если что-либо нужно очистить
    _selfPlayer.dispose();
}
 
private function init() {
    if (_enemyPlayer === null) {
        _enemyPlayer = new EnemyPlayer();
    }
    else {
        _enemyPlayer.init();
    }
 
    if (_selfPlayer === null) {
        _selfPlayer = new SelfPlayer();
    }
    else {
        _selfPlayer.init();
    }
 
    if (_scoreboard === null) {
        _scoreboard = new Scoreboard();
    }
}
__________________
тут я

Старый 27.08.2013, 12:14
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 19  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
KumoKairo, КорДум, спасибо за уточнения, тогда пробуем реализацию с init-подходом.

Старый 27.08.2013, 15:31
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 20  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
КорДум, а как еще можно?
Наверное я буду кэпом, но что еще можно сказать: можно без интерфейса создать методы

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:28.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
constructor , повторный вызов

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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