Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   очередной вопрос про пользовательское событие (http://www.flasher.ru/forum/showthread.php?t=123283)

Karandash8 29.03.2009 16:54

очередной вопрос про пользовательское событие
 
прочитал много тем по данному вопросу, но так и не нашел ответа.

у меня есть несколько классов они наследуются у MovieClip. соответственно есть несколько клипов, по одному для каждого класса. В каждом из этих классов генерируется пользовательское событие (оно генерится при нажатии на клип) и вот когда я слушаю это событие то как мне определить каким клипом оно было сгенерировано??? на данный момент я смотрю значение event.target там содержится строка вида [object <имя класса>], но считаю это не очень удобным, так как приходится сравнивать строки и сравнений выходит давольно много.

Есть какие то способы более гшибкого подхода к этому вопросу??

ramshteks 29.03.2009 17:36

ну можете им айдишники какие нибудь прицепить. сравнения то все равно будут, только по какому то значению, а не по адресу.

BlooDHounD 29.03.2009 17:52

сравнивать объекты. и быстрее и правильнее.

Karandash8 29.03.2009 20:52

Цитата:

Сообщение от BlooDHounD (Сообщение 809322)
сравнивать объекты. и быстрее и правильнее.

а можно поподробнее?? что имеется ввиду под сразнением обьектов?

BlooDHounD 30.03.2009 00:35

Цитата:

как мне определить каким клипом оно было сгенерировано???
что должно быть на выходе этого определения?

AlexDesinger 30.03.2009 01:57

в функции, которая вызывается при клике на клипе:
Код AS3:

var my_mc:MoveClip=event.currentTarget as MovieClip;

вы про это спрашиваете?

BlooDHounD 30.03.2009 03:13

ну если это то, что Вам необходимо, зачем Вы делаете сравнение по строковым значениям?

Karandash8 30.03.2009 19:53

Цитата:

Сообщение от BlooDHounD (Сообщение 809406)
ну если это то, что Вам необходимо, зачем Вы делаете сравнение по строковым значениям?

сравнение я делаю по строковым значениям потому, что в том месте где находится слушатель события нет объктов классов-клипов и соответственно сравнивать event.target не с чем.

BlooDHounD 30.03.2009 20:40

рас не с чем, то с чем Вы сравниваете? я не понимаю, что Вы добиваетесь своим сравнением, и зачем его делаете.

Karandash8 30.03.2009 21:29

у меня есть 4 клипа-кнопки и 4 клипа курсора. Слушатель нажатия на кнопки находится там где выбирается какой курсор показать. и мне необходимо узнать какая кнопка нажата чтобы показать соответствующий курсор.
Проблема в том, что количество кнопок и курсоров увеличится, и тогда сравнений получится очень много.

Resonan 30.03.2009 21:32

event.target.name

BlooDHounD 31.03.2009 00:48

@Karandash8
Код AS3:

var dic:Dictionary = new Dictionayry();
...
var c:Cursor = dic[ button ];

не?

Karandash8 31.03.2009 09:34

Цитата:

Сообщение от Resonan (Сообщение 809595)
event.target.name

у меня была мысль использовать это, но там значения получаются такого вида: instance268. Я совершенно не понял чтоэто за число и от чего оно зависит

Добавлено через 1 час 18 минут
Цитата:

Сообщение от BlooDHounD (Сообщение 809623)
@Karandash8
Код AS3:

var dic:Dictionary = new Dictionayry();
...
var c:Cursor = dic[ button ];

не?

возможно я не совсем понял назначение тут класса Dictionary, но вот какое у меня дерево вложенности классов:

DocClass{
Tools{
ButtonWateringPot
ButtonLoosenTool
ButtonBagWithBugs
ButtonSunShining
}
WateringPot
LoosenTool
BagWithBugs
SunShining
}

здесь соответственно ButtonWateringPot, ButtonLoosenTool, ButtonBagWithBugs, ButtonSunShining - это кнопки;
WateringPot, LoosenTool, BagWithBugs, SunShining - это курсоры.
пользовательское событие начинается в каждой из кнопок, а отлавливается в классе Tools и после этого назначается нужный пользовательский курсор.

На данный момент я реализую это так: в классе Tools создаю два массива, один содержит обьекты курсоров, а второй текстовые имена классов кнопок. Причем индексы для пары кнопка-курсор совпадают. После этого при отлове события, я в цикле сравниваю event.target с элементами массива имен, при совпадении, назначаю пользовательский курсор из массива курсоров с текущим индексом. Получилось относительно коротко, но лучший ли это вариант??

Bgg 16.04.2009 13:11

Таже самая фигня
Код AS3:

//два мувиКлипа
b1.addEventListener(MouseEvent.CLICK, switchRoom);
b2.addEventListener(MouseEvent.CLICK, switchRoom);
//метод
private function switchRoom(event:MouseEvent):void
{
        switch(event.target)
        {
                case b1:roomN = 0; break;
                case b2:roomN = 1; break;
        }
}

Наивно почемуто полагал что event.target будет являтся b1 при нажатии на первую кнопку и b2 соотвественно на вторую. Как можно определить где b1, а где b2?

Упс, спасибо уже ответили пока писал своё сообщение :)

upd Не, ничего не помогло. Если писать в кадрах, то event.target.name верно определяет b1 и b2, а если внутри класса то поеределяет как instance25 :umnik2:

litebox 16.04.2009 14:19

ramshteks Вам вполне верно написал: если вы расширяете MovieClip'ы своими классами, заведите в классах поле
Код AS3:

 var cursorIndex:int;

и будете туда записывать индекс курсора, который должен будет отобразится при нажатии на этот клип, обработчик будет, например, таким:
Код AS3:

private function switchRoom(event:MouseEvent):void
{
        mcCursor.gotoAndStop((event.target as MyClass).cursorIndex);
}

или же, если каждый курсор - это отдельный клип, можете хранить в классе не идентификатор, а указатель на клип нужного курсора


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

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