![]() |
Как передать параметр в фунцию, вызванную addEventListener'ом?
Нужно, чтобы в каждом фрейме трейсился заданный элемент массива. Как передать в функцию traceNumEnterFrame() параметр?
Код AS3:
|
Ну сделайте myVar полем класса.
|
Код AS3:
|
Цитата:
|
В доке от адоба есть пример по программированию будильника - там про пользовательские события достаточно много написано.
ЗЫ. к своему стыду так и не могу найти время чтоб все-таки изучить эту тему. Чувствую что придется изучать по ходу выполнения очередного проекта, когда припечет :( |
gait, а что на самом деле надо-то?
|
Ему нужен LOLEvent.
|
может и так :)
но вообще-то, если что-то в AS3 приходится делать "через голову", то скорее всего не надо этого делать. :D |
н-да. обнаружились глобальные пробелы в знании и понимании as3:rolleyes:. может быть мне и нужен LOLEvent, но я почти ничего не понимаю, что там происходит (зачем создаётся public static const LOL, для чего нужна функция override, ну и много чего еще, выходящее за рамки этой темы). думал, что может быть есть простое решение (типа addEventListener(Event.ENTER_FRAME, traceNumEnterFrame(myVar)):D, но всё оказалось значительно сложнее :wacko:) короче, пошёл читать форум и доки, а то будет слишком много тупых вопросов. Спасибо за наводки TanaTiX (пример по программированию будильника), MrPoma (за http://www.flasher.ru/forum/showthread.php?t=136030).
|
можно попробовать сделать так:
Код AS3:
|
Сколько людей уже задавались этим вопросом! :)
Есть ещё одно решение, оно "как бы" не через задний проход. создать функцию, которая потом будет вызывать нужную уже с параметрами, и вписать её в ивент лисенер. Код AS3:
|
Цитата:
|
Цитата:
removeEventListener(MouseEvent.CLICK, BlablaCaller); можно написать где угодно. |
Цитата:
Код AS3:
Код AS3:
Код AS3:
|
мне когда лениво поднимать кастомный класс я делаю так
Код AS3:
|
MidnightOne, mickfallout, автор хочет передать параметр вместе с событием, т.е. сама переменная необязательно должна быть доступна в объекте, в котором вы подписываетесь на это событие. Событие, вообще, может, например, всплывать от какого-то ребенка, который будет передавать значение своей приватной переменной вместе с этим событием. Поэтому ваши способы не являются решением и равносильны тому, чтобы просто создать в классе дополнительное поле для хранения этого параметра.
|
Цитата:
Код AS3:
Цитата:
Код AS3:
Код AS3:
|
Цитата:
Цитата:
|
Цитата:
А вообще такую ситуацию можно представить: Код AS3:
|
Самый сакраментальный вопрос - а зачем? EventDispatcher хочет вызывать слушателя с одним параметром, который сам же и создает - зачем его насиловать? Если вам очень нужно больше параметров - не пользуйтесь EventDispatcher - напишите функцию, которая принимает больше параметров и вызовите ее...
|
А кастомные события ну никак?
|
эээм, а чем не устроил вариант через словарь ?
|
На самом деле, как я понял, автор так и не объяснил, ЗАЧЕМ ему это нужно. :)
Что конкретно он хочет реализовать с помощью передачи параметра? И почему он так уверен, что ему нужно вообще что-то куда-то передавать? Пока это здорово смахивает на "как мне запустить второй клип из первого, чтобы он запустил третий, а третий снова запустил первый, после чего самоликвидировался, прихватив с собой второй...". Техническое решение найти можно, но в чем смысл этого зоопарка? :D |
Цитата:
Код AS3:
|
Цитата:
PS: Мне кажется, в любом из предложенных случаев правильнее создать глобальную переменную и не передавать её, а просто записать-прочитать. Почему? А потому, что все эти извращения (и уж тем более кастомная функция - диспетчер событий) занимают больше памяти и процессора, чем одна маленькая переменная. Про оптимизацию забывать не стоит! |
Цитата:
|
Цитата:
Функция А вызывает функцию Б с количеством параметров 1 (одна) штука. Это категорически изменить нельзя т.как функцию не вы вызываете - следовательно оставьте ее в покое и напишите другую функцию которая будет вызывать с двумя, тремя, четырьмя и т.д. параметрами. А то, что вы написали - мне вообще не понятно зачем это нужно / что это должно делать. Я имею в виду вот что: Код AS3:
|
Разве сложно создать кастомное собыие? флэщдевелоп их генерит почти автоматически. кастомное событие это просто "оборачивание" любого количества параметров в один объект, только со строгой типизацией.. практически тоже самое как:
Код AS3:
|
Цитата:
Цитата:
Код ваш и что он делает - тоже не понял. у меня вообще генерит ошибку Цитата:
Код AS3:
Цитата:
Цитата:
|
это был псевдокод.
Цитата:
|
Цитата:
|
+1 :)
Возможно, автор мигрирует из той среды программирования, где на коллбэк-функцию можно повесить необходимые параметры, которые затем применить на свое усмотрение в обработчике... Но вот зачем ему это нужно именно сейчас и здесь, он молчит как партизан. :) |
Public static const нужен для того, чтобы сделать код интуитивно более понятным
например вместо MouseEvent.CLICK можно использовать просто "click" но это может быть не очень понятно поэтому принято использовать константы. public мы определяем потому, что это событие должно быть доступно из вне. Теперь, как все собрать воедино: Расширяем класс event Своим Классом Определяем public переменную Не забываем про функцию clone Далее все просто 1. 1.регистрируем листенер, пишем константу того класса которая диспечеризирует наше событие 2. В приемнике события указывает тип принимаемого события (в данном случае пользовательского) 3. диспетчеризируем пользовательское событие согласно внутренней логике |
>>что-то такой простой вариант в голову не пришёл...
А я его описал ещё на прошлой странице. |
Код AS3:
|
Цитата:
я уже советовал делать через словарь ... куда проще/изящней/удобней ( конечно на случай когда лень писать кастомный Event) |
Цитата:
|
Цитата:
|
Цитата:
|
Для передачи именно текущего объекта можно использовать замыкание:
Код AS3:
Вместо этого, конечно, можно наследовать URLLoader и хранить каждый файл в экземпляре класса загрузчика. |
| Часовой пояс GMT +4, время: 03:07. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.