![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2007
Сообщений: 302
|
Здравствуйте, такой вопрос.
1.Если контейнер и элементы удаляются таким способом удалятся ли все элементы из рабочей области если вызывались по такому принципу. Главный класс "Controller" из него вызывается класс(в нем создается объект класса) "UI_Connect", В классе "UI_Connect" есть метод destructor() в котором и определяется Из класса "UI_Connect" вызывается(создается объект класса) класс "UI_NewGame" Если я вызову из класса "UI_NewGame" метод destructor() из класса "UI_Connect", сработает он по такому же приципу? Тоисть удалит ли все элементы интерфейса из рабочей области? Визуально элементы удаляются в обоих случаях, но удаляются ли они полностью? Насколько я понимаю обычный класс есть наследником суперкласса, тоисть если я обращаюсь из super и удаляю элементы - удаляются элементы всех классов что есть на рабочей области? 2.Если я подписываюсь на создание события в пределах одной функции, после завершения функции обработчик события погибает? Или нужно его зачищать? Просто создается три обработчика события на таймер, в трех приватных функциях var timer:Timer = new Timer(1400, 1); timer.start(); timer.addEventListener(TimerEvent.TIMER, comboSpCount); Спасибо заранее, надеюсь на ответ. Последний раз редактировалось Killer_13; 31.01.2011 в 16:13. |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 32
|
1. Во-первых, с чего бы это UI_NewGame должен подтирать UI_Connect когда есть контроллер? Во-вторых уже не важно.
2. Нет. Бред пишете. |
|
|||||
|
Регистрация: Jan 2007
Сообщений: 302
|
Цитата:
2. Почему бред? Необоснованные слова ничего не стоят, я собственно написал, чтоб знающие люди подсказали, а не сказали "true" || "false". Если есть 3 функции к примеру private function time1():void{ var timer:Timer = new Timer(1400, 1); timer.start(); timer.addEventListener(TimerEvent.TIMER, comboSpCount1); } private function time2():void{ var timer:Timer = new Timer(1400, 1); timer.start(); timer.addEventListener(TimerEvent.TIMER, comboSpCount2); } private function time3():void{ var timer:Timer = new Timer(1400, 1); timer.start(); timer.addEventListener(TimerEvent.TIMER, comboSpCount3); } Если такой код вы считаете плохим, тогда как создать глобальный обьект типа Timer и подписывать на него 3 различных события через определенное время? Конструктор у таймера принимает только 2 значения. |
|
|||||
|
Отписаться как-то так
А еще есть setTimeout()
__________________
...вселенская грусть |
|
|||||
|
Регистрация: Jan 2007
Сообщений: 302
|
Цитата:
А на счет 1 вопроса? Спасибо. |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 32
|
Хорошо, распишу подробнее.
1. this.someMethod() и super.someMethod() ссылаются на один и тот же объект. Разница в том, что первый вызывает переопределенный метод, а второй - метод, который был определен в родительском классе, но оба эти метода выполняются над данными одного и того же объекта. Нет никакой разницы как откуда и каким образом вы вызываете UI_Connect.destructor() - и this и super в нем будут указывать именно на этот экземпляр UI_Connect. Просто красивее, практичнее и логичнее было бы закрывать одно окно в контроллере, а не из другого окна (если предположить, что UI_Connect и UI_NewGame - это какие-то окна). UI_NewGame по идее вообще не должен иметь референс на UI_Connect. Раз уж у вас есть контроллер, то используйте его хоть как-нибудь. 2. Давайте по порядку: вы создаете локальный экземпляр класса Timer, подписываете на его ивент какой-то свой метод, запускаете таймер, функция завершается. Референс на созданный таймер вы после этого теряете, но сам экземпляр таймера конечно никем не убивается. По прошествии заданного интервала времени (примерно), невидимый вам таймер вызовет обработчик, который вы ему прописали. В обработчике лучше явным образом отписаться от ивента этого таймера как написал gloomyBrain чтобы сборщик мусора почистил этот таймер. В чем вообще вопрос был? Если вы хотели, чтобы таймер сам отписал всех своих листенеров и убился после завершения функции только от того что эта функция приватная - то нет, ничего такго не будет. ООП тут ни при чем. Вот, например, вы в приватной функции локально объявляете переменную типа Sprite, создаете ее экземпляр, рисуете в нем какой-нибудь квадрат и добавляете его не stage. Вы будете ожидать, что после завершения функции квадрат сам собой со stage удалится только потому что вы его нарисовали локально в приватной функции, да? |
|
|||||
|
Регистрация: Jan 2007
Сообщений: 302
|
Цитата:
![]() 2. - БРАВО! Прям в точку, а еще вспомнилось крылатое выражение "убить себя па стену". ![]() ![]() ![]() ![]() Вы все прекрасно обьяснили. ![]() ![]() Я просто чуток сьехал на с++, где локальная переменная уничтожается при выходе из функции. ![]() ![]() Спасибо огромное! |
|
|||||
|
Регистрация: Jan 2007
Сообщений: 302
|
shootkin - небольшой вопросик по первому вопросу.
![]() Если я правильно понял, то например class A extends MovieClip тогда super.метод() будет вызван от класса MovieClip типо так получается... или.. ![]() |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 32
|
Цитата:
public class A extends Sprite { override public function set alpha( value : Number ):void { // ничего не делаем } public function test():void { this.alpha = 0.5; // вызовет переопределенный метод, ничего не сделает super.alpha = 0.5; // вызовет метод родительского класса (Sprite), установит альфу как положено } } |
|
|||||
|
Свои 4 копейки:
super гарантированно дёргает метод суперкласса, this дёргает метод этого класса. Но так как при наследовании текущий класс наследует методы суперкласса, this.someMethod() вполне может дёрнуть метод суперкласса. В случае если ни numChildren, ни removeChildAt не переопределены, то нужно писать так: Или так, если super в проекте не пишут: Или вообще не писать. Обычно пишут первым и третим вариантами. В случае неперекрытых методов, конечно.
__________________
Тут мужик танцует и поёт про флэш |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:33. |
|
|
« Предыдущая тема | Следующая тема » |
|
|