Просмотр полной версии : Как использовать один обработчик для разных объектов?
Пишу крестики нолики..(учусь).
Возникла проблема, что для каждого клипа(ячейки) при
Cell1.addEventListener(MouseEvent.CLICK,Step);
нужно писать функцию типа
function Step(e:Event)
{
if (Player==1 && Cells[1]==0)
{
Cell1.gotoAndStop(2);
Player=2;
Cells[1]=1;
stage.addEventListener(Event.ENTER_FRAME,proverka);
}
if (Player==2 && Cells[1]==0)
{
Cell1.gotoAndStop(3);
Player=1;
Cells[1]=2;
stage.addEventListener(Event.ENTER_FRAME,proverka);
}
}
а нельзя как бы сделать одну функцию для каждой ячейки?
наверное что бы функция смотрела кто её вызвал и срабатывала для той ячейки.??
используйте Event.target, чтобы узнать кто вызвал событие (т.е. для доступа к Cell). Подробнее тут (http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7e4f.html).
Должно получиться что-то вроде:
function Step(e:Event)
{
// ...
MovieClip(e.target).gotoAndStop(2);
// ...
}
GemiBillyBob
05.01.2011, 20:16
В обработчике события (функции Step) проверяем e.target — это ссылка на нажатый клип.
Пробуйте что-то такое, или вариации:
function Step(e:Event)
{
if(e.target==Cell1){
if (Player==1 && Cells[1]==0)
{
Cell1.gotoAndStop(2);
Player=2;
Cells[1]=1;
stage.addEventListener(Event.ENTER_FRAME,proverka);
}
if (Player==2 && Cells[1]==0)
{
Cell1.gotoAndStop(3);
Player=1;
Cells[1]=2;
stage.addEventListener(Event.ENTER_FRAME,proverka);
}
}
}
Тему надо было назвать хотя бы "Как сделать одну функцию мышки на разные клипы??? Нид хелп ребята гляньте плиз"
passertm
05.01.2011, 20:29
Выйдите в раздел Форум Flasher.ru > Flash > ActionScript 3.0
И зайдите в тему "Важно: Слушатель с параметром"
andrew911
05.01.2011, 23:32
Выйдите в раздел Форум Flasher.ru > Flash > ActionScript 3.0
И зайдите в тему "Важно: Слушатель с параметром"
Параметры в данном случае не нужны.
Хватит e.target, как написали выше
Решилось так!
function Step(e:Event)
{
if (Player==1 && Cells[1]==0)
{
MovieClip(e.target).gotoAndStop(2);
Player=2;
Cells[1]=1;
stage.addEventListener(Event.ENTER_FRAME,proverka);
}
if (Player==2 && Cells[1]==0)
{
MovieClip(e.target).gotoAndStop(3);
Player=1;
Cells[1]=2;
stage.addEventListener(Event.ENTER_FRAME,proverka);
}
}
Все работает СПС)) Но опять проблема! Есть массив Cells[i] , i - номер ячейки. То есть при нажатии на Cells1 заполняеться Cells[1]..
можно как нибудь в эту функцию передать переменную i?
Вот теперь Вам точно в тему "Важно: Слушатель с параметром" :)
Если не нравится слушатель с параметром, можно создать Dictionary.
var cells:Dictionary = new Dictionary();
function Step(e:Event)
{
if (Player==1 && cells[e.target] != null && cells[e.target] == 0)
{
MovieClip(e.target).gotoAndStop(2);
Player=2;
cells[e.target]=1;
stage.addEventListener(Event.ENTER_FRAME,proverka);
}
if (Player==2 && cells[e.target] != null && cells[e.target] == 0)
{
MovieClip(e.target).gotoAndStop(3);
Player=1;
cells[e.target]=2;
stage.addEventListener(Event.ENTER_FRAME,proverka);
}
}
andrew911
06.01.2011, 00:30
Cells[int(String(e.target.name).substr(5))] = ....
andrew911
06.01.2011, 00:37
ни чего не происходит((
То есть при нажатии на Cells1 заполняеться Cells[1]..
Cells1 или Cell1 все-таки?
если Cell1, то
Cells[int(String(e.target.name).substr(4))] = ....
ни чего не происходит((
цитата к
var cells:Dictionary = new Dictionary();
function Step(e:Event)
{
if (Player==1 && cells[e.target] != null && cells[e.target] == 0)
{
MovieClip(e.target).gotoAndStop(2);
Player=2;
cells[e.target]=1;
stage.addEventListener(Event.ENTER_FRAME,proverka);
}
if (Player==2 && cells[e.target] != null && cells[e.target] == 0)
{
MovieClip(e.target).gotoAndStop(3);
Player=1;
cells[e.target]=2;
stage.addEventListener(Event.ENTER_FRAME,proverka);
}
}
на счет этого
Cells[int(String(e.target.name).substr(5))] = .... я понял что она делает и я опечатался у меня Cell1)))
А куда ее вставлять я не понял
Добавлено через 2 минуты
У меня Cell1
Cells[int(String(e.target.name).substr(4))] = ....
куда это вставлять?
andrew911
06.01.2011, 00:49
Понятно.
Вам надо, чтобы при нажатии на Cells1 заполнялось Cells[1]..
Вставляйте там, где ловите нажатие.
Так вы определяете индекс Cells - int(String(e.target.name).substr(4))
Cells[int(String(e.target.name).substr(4))]...
Никогда так не делайте.
Почему? Попробуйте разобраться, что делает следующая конструкция, построенная по такой же технологии:
this._parent._parent.registerTip(this._parent._parent['area'+this._parent.txtTarget._name.charAt(3)], this.txt.text);
passertm
06.01.2011, 13:23
Народ я чегото не совсем вас понимаю. Говоря "Слушатель с параметром" не обязательно идет речь о каком то необычным параметре. e.target тоже параметр. И в это теме первая же ссылка указывает как можно использовать e.target для определения на что именно нажато.
А гдето в теме было написано что можно в e.target добавить своство чтобы его можно было использовать при обработке. Вообщем ИМХО все что нужно товаришу он там нашел бы:)
Добавлено через 5 минут
Вот вместо этого я бы советовал как раз добавить новое поле.
int(String(e.target.name).substr(4))
а если в массиве те самые елементы на которые нажимают то лучше сделать
var n:int=array.indexOf(e.target)
andrew911
06.01.2011, 16:27
Никогда так не делайте.
Почему? Попробуйте разобраться, что делает следующая конструкция, построенная по такой же технологии:
this._parent._parent.registerTip(this._parent._parent['area'+this._parent.txtTarget._name.charAt(3)], this.txt.text);
Вынесите это в функцию с понятным именем. И тут нету нагромождения парентов, которые все совсем запутывают.
Народ я чегото не совсем вас понимаю. Говоря "Слушатель с параметром" не обязательно идет речь о каком то необычным параметре. e.target тоже параметр.
e.target это стандартное свойство. Под слушателем с параметром же имеется в виду передавать новые, нестандартные параметры.
По делу: согласен int(String(e.target.name).substr(4)) это не совсем хорошо, тут проблема в проектировании приложения - если подумать можно все сделать прозрачнее и однозначнее, без кучи Cell1 ... Celln.
Но для новичка, если он понимает, что делает та функция, подойдет. Потом он столкнется с неудобствами, связанными с такой архитектурой, сделает выводы и сделает лучше.
PS Например в коде создавать и размещать клетки, заносить их в массив, потом работать с ним.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.