Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Экземпляр какого класса придет в листенер. Часть 2 (http://www.flasher.ru/forum/showthread.php?t=210420)

caseyryan 11.03.2015 20:41

Цитата:

Что он умеет нового по сравнению с TransportEvent?
Он содержит собственные константы, которые присущи только человеку. Вот что нового.
А расширяет TransportEvent для того, чтобы унаследовать от него свойство dog
Даже если бы он вообще ничего не умел нового и констант не содержал, он все равно должен был бы быть, потому что Man должен посылать ManEvent, а не какой-то там TransportEvent.

Вообще, исходя из вашей логики, не надо создавать вообще никаких лишних классов. Можно весь код писать в одном полотенце Main и не париться, аккуратно раскладывая все по полочкам. Программе пофиг аккуратно там все написано или названия классов и свойств вообще обфусцированы. Все это делается исключительно для удобства чтения программистом.

callme 11.03.2015 20:58

Цитата:

Цитата:

Что он умеет нового по сравнению с TransportEvent?
Он содержит собственные константы, которые присущи только человеку. Вот что нового.
Это к наследованию не имеет отношения.

Цитата:

Вообще, исходя из вашей логики, не надо создавать вообще никаких лишних классов. Можно весь код писать в одном полотенце Main и не париться, аккуратно раскладывая все по полочкам.
А по вашей логике давайте будем интерфейсы плодить по каждому поводу для читабельности, пусть вместо DisplayObject в функцию приходит например IHaveXY.

caseyryan 11.03.2015 21:15

Что ж, удачи тогда с изобретением новых концепций)

GBee 11.03.2015 21:32

Цитата:

Сообщение от callme (Сообщение 1179914)
Я хочу узнать тип параметра функции listener.

Код AS3:

function listener(*что сюда прийти должно*):void
{
 
}


TransportEvent приходит и смотрите его type в зависимости от типа можно понять что вы запихнули в cargo

Код AS3:

dispatchEvent( new TransportEvent(dog, ManEvent.I_BOUGHT_DOG) );
dispatchEvent( new TransportEvent(cat, ManEvent.I_FOUND_CAT) );
dispatchEvent( new TransportEvent(iam, ManEvent.I_DONT_KNOW_EVENT_S_LOGIC) );
 
function listener(event:TransportEvent):void
{
    switch(event.type)
    {
        case ManEvent.I_BOUGHT_DOG:
            event.cargo.createNoise();
        break;
        case ManEvent.I_FOUND_CAT:
            event.cargo.makeMyauMyau();
        break;
        case ManEvent.I_DONT_KNOW_EVENT_S_LOGIC:
            event.cargo.openAdobeHelp();
        break;
    }
 
}

Добавлено через 1 минуту
Ну или разные слушатели для разных типов событий.

Wolsh 11.03.2015 21:41

Цитата:

он все равно должен был бы быть, потому что Man должен посылать ManEvent, а не какой-то там TransportEvent.
Не вижу ничего зазорного в том, что люди отправляют грузовики.
Цитата:

пусть вместо DisplayObject в функцию приходит например IHaveXY
Вот тут Вы вообще не туда наступили. Не приписывайте Кейси глупости, основанные на неведении. Это не его мысль, а Ваша.
Проблема вобщем в том, что addEventListener принимает подозрительную строку а не тип События. И этого нам не исправить, увы (иногда не увы а ура, но здесь кажется увы).
Вцелом я вообще не вижу никакой проблемы, кроме "мы ожидаем", потому что "мы" же и использовали константу из другого класса. Ну так не ожидайте. Во всех случаях, когда мы используем обычный Event со своим строковым типом, мы имеем ровно эту проблему — подписываемся на какую-то левую строку, а получаем в хэндлер стандартный Event. И все довольны.
Либо напишите пресловутый ManEvent extends TransportEvent, как советует Кейси. Только наверное нет смысла добавлять к "грузу" еще и "собаку")))))

callme 11.03.2015 22:14

Цитата:

Не приписывайте Кейси глупости, основанные на неведении. Это не его мысль, а Ваша.

caseyryan приписал мне:
Код AS3:

Вообще, исходя из вашей логики, не надо создавать вообще никаких лишних классов. Можно весь код писать в одном полотенце Main и не париться


После чего я приписал ему интерфейсы.

faraday 12.03.2015 01:33

может вообще не стоит использовать классы событий, если нет четкого понимания как и зачем это делать)
передавайте через общую шину событие buyPet, единсвтенное можете расширить Event до datEvent, и уже в data пихаете все что нужно. Мне кажется проблема в первую очередь в архитектуре, но однозначно сказать не могу по этому отрывку кода, но слишком все усложнено и запутано.

callme 12.03.2015 08:29

Цитата:

может вообще не стоит использовать классы событий, если нет четкого понимания как и зачем это делать)
Укажите где я не понимаю как работают события

Цитата:

единсвтенное можете расширить Event до datEvent, и уже в data пихаете все что нужно
Вы описали мой TransportEvent

faraday 12.03.2015 12:28

Дело не в принципе работе событий, а понимании целей их типизации. Вы сами видите что получается сложно и запутанно - это сразу должно настораживать. У transportEvent та же проблема, семантически не отражает своей сути (если это просто dataEvent) . Если пользователь купил собаку, то в системе должно быть сгенерировано что-то типа addPet, это логично что где-то понадобится обрабатывать целый класс событий, а не отдельно рождение кошек, собак, поросят.
Но не видя игры целиком - это опять же мое предположение

caseyryan 12.03.2015 18:37

faraday, вся эта тема, и предыдущая его тема тоже, попахивает каким-то троллингом (кого-то он мне напоминает, из уже неоднократно забаненных на форуме). Чувак либо вообще нифига не понимает и не хочет понимать, либо специально делает вид, что не понимает. Ему уже и так все досконально разжевали что, как и зачем. В итоге вся тема стоит на том же месте, с которого началась.


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

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