Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Кто вызвал функцию? (http://www.flasher.ru/forum/showthread.php?t=74010)

Fr@ddy 09.01.2006 14:39

Кто вызвал функцию?
 
Вложений: 1
В кадре есть, например, три кнопки, по нажатию на какую-либо из них, выводится (trace)
переменная, которая находится внутри неё. (Button.perem)
Но как отследить какая кнопочка была нажата?

З.Ы.
Конечно можно и так:
Код:

_root.but1.onRelease=function(){
        trace(but1.perem)
}
_root.but2.onRelease=function(){
        trace(but2.perem)
}
_root.but3.onRelease=function(){
        trace(but3.perem)
}

Так не интересно, и ещё если я захочу произвольное кол-во кнопок?
Тут циклом, это тоже знаю как сделать, но ведь, интересно, возможен-ли первый вариант?

Если что-то не понятно, вот:

silin 09.01.2006 15:17

trace(this.perem)

Antares 09.01.2006 16:38

Пользоваться mx.core.EventDispatcher

silin 09.01.2006 16:55

>>Пользоваться mx.core.EventDispatcher
не очень ясно зачем, если кнопки уже подписаны на onRelease: кто вызвал? - this и вызвал, чего еще..

Fr@ddy 09.01.2006 17:27

Цитата:

Сообщение от silin
trace(this.perem)

Так тоже пробовал. Не катит. "undefined"

Fr@ddy 09.01.2006 17:52

Маленько не так сказал:
Так будет работать, если привязать к кнопке.
А мне надо к функции.

silin 09.01.2006 18:05

Вложений: 1
к функции так к функции
Код:

but1.perem="FraDDy1";
but2.perem="FraDDy2";
but3.perem="FraDDy3";
but3.onRelease=but2.onRelease=but1.onRelease=WhatIsName;
function WhatIsName() {
        trace(this.perem)
}


Fr@ddy 09.01.2006 18:44

Э... это самое..... да, вот.... спасибо :D)) , но не пояснишь что это такое?
Код:

but3.onRelease=but2.onRelease=but1.onRelease=WhatIsName;
Особая форма записи функции? Первый раз такое вижу.


Цитата:

Сообщение от Antares
Пользоваться mx.core.EventDispatcher

Попыталься в хелпе найти эту команду, и ничё не нашел. Флеш 8.
А раз не нашел, то не знаю как её правильно использовать.
Как полагаю, то так:
trace(mx.core.EventDispatcher(this.perem));
но раз не работает, то значит не правильно.

Дай, пожайлуста, ссылочку откуда откопал эту команду, поразбираюсь, вдруг пригодиться. :D

silin 09.01.2006 19:05

>>Особая форма записи функции? Первый раз такое вижу.
да обычная: обрабочикам onRelease кнопок присваиваем ссылку на функцию..

Double 09.01.2006 19:06

silin просто сделал функцию, реализующую тот же самый this.perem и навесил её на onRelease твоих кнопок.

не знаю, я традиционно (наверное) не люблю так делать. к чему лишний код? пишу код в мувике кнопки (то, что silin в первом посте написал), а её инстансы получают его дефолтом. да, в моём варианте код раскидан ещё и по тайм-лайнам мувиков. но если не работаешь в супер большой команде с супер текучкой кадров (в смысле HR), то и пох, если честно! silin вот, кстати, как я посмотрю, лишний код вообще не воспринимает. я-то по паскалевски старомоден и код структурирую. ну вот не могу я читать одной строкой
Код:

if (something) {трам; пам; пам;}
мне, блин, всё надо с отступами в зависимости от степени вложенности по строчкам разнести. глупо, конечно. да и флейм ;)

silin 09.01.2006 19:37

2Double
могу сказать 'к чему лишний код': иной раз он и не лишний, как здесь например:
если написать but1.onRelease=but2.onRelease=function(){trace('x')}, то каждая кнопка понесет на борту функцию (объект),
а если but1.onRelease=but2.onRelease=someFun, то только ссылку..
здесь это копейки, но можно представить ситуацию, когда экономия ресурсов будет существенной..

Double 09.01.2006 20:11

2silin, я чуть-чуть не о том :) я говорил, что если у меня будет n-однотипных (по свойствам) объектов в сцене, то я сделаю этот объект в библиотеке, там (на его тайм-лайне) навешу ему все "родительские" функции, которые его инстансы и "унаследуют" :) такое вот ООП в упрощённом виде ;) а писать функцию, ссылку на которую затем программно присваивать на-аттаченым клонам, я почему-то не люблю. вседь если кол-во клонов произвольное, то придётся код или в функции клонирования (хех) писать, или потом их циклом перебирать. моя позиция нелогична, но для меня - привычна :-D я об этом и говорил, флейм.

silin 09.01.2006 20:30

>>такое вот ООП в упрощённом виде
именно что в упрощенном: инстансы не унаследуют родительские функции, а будут иметь каждый по своей копии (хотя это и не принципально для небольших задачек)
>>а писать функцию, ссылку на которую затем программно присваивать на-аттаченым клонам..
так а классы начто?
зы: я ни разу не адепт истинного ООП, но чего ж не писать грамотно раз есть возможность, хотя и дело вкуса/привычки..

Double 09.01.2006 21:01

да нет, просто я лентяй. если задача не супер-пупер ресурсоёмкая, то я предпочитаю делать так, как описал выше: один раз прописал общие свойства, а потом про них даже и не вспоминай, аттачь на здоровье. да, получаются копии (аналогично mc1.func=mc2.func=function(){}) и код размазан по разным тайм-лайнам. но если речь идёт о чём-то не супер-глобальном...

Antares 09.01.2006 21:17

Сил, выйдет АС3 в полном релизе -- сам знаешь, что будет с ООП-неадептами ;)

Fr@ddy 10.01.2006 16:45

2Antares! Я написал, но ты видно не заметил:
Попыталься в хелпе найти эту команду, и ничё не нашел. Флеш 8.
А раз не нашел, то не знаю как её правильно использовать.
Как полагаю, то так:
trace(mx.core.EventDispatcher(this.perem));
но раз не работает, то значит не правильно.

Дай, пожайлуста, ссылочку откуда откопал эту команду, поразбираюсь, вдруг пригодиться.

Fr@ddy 10.01.2006 16:48

2silin, 2Double, теперь всё понял, спасибо.
Кстати, мне тоже чет тоже понравился такой прием, проше записывать.:D)


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

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