Форум 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=148564)

artarx 05.01.2011 19:53

Как использовать один обработчик для разных объектов?
 
Пишу крестики нолики..(учусь).
Возникла проблема, что для каждого клипа(ячейки) при

Код AS3:

Cell1.addEventListener(MouseEvent.CLICK,Step);

нужно писать функцию типа

Код AS3:

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);
    }
}

а нельзя как бы сделать одну функцию для каждой ячейки?
наверное что бы функция смотрела кто её вызвал и срабатывала для той ячейки.??

surlac 05.01.2011 20:10

используйте Event.target, чтобы узнать кто вызвал событие (т.е. для доступа к Cell). Подробнее тут.
Должно получиться что-то вроде:
Код AS3:

function Step(e:Event) 
{
// ...
    MovieClip(e.target).gotoAndStop(2);
// ...
}


GemiBillyBob 05.01.2011 20:16

В обработчике события (функции Step) проверяем e.target — это ссылка на нажатый клип.
Пробуйте что-то такое, или вариации:
Код AS3:

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

Цитата:

Сообщение от passertm (Сообщение 962257)
Выйдите в раздел Форум Flasher.ru > Flash > ActionScript 3.0

И зайдите в тему "Важно: Слушатель с параметром"

Параметры в данном случае не нужны.
Хватит e.target, как написали выше

artarx 06.01.2011 00:13

Решилось так!

Код AS3:

 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?

surlac 06.01.2011 00:26

Вот теперь Вам точно в тему "Важно: Слушатель с параметром" :)
Если не нравится слушатель с параметром, можно создать Dictionary.

Код AS3:

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))] = ....

artarx 06.01.2011 00:33

ни чего не происходит((

andrew911 06.01.2011 00:37

Цитата:

Сообщение от artarx (Сообщение 962318)
ни чего не происходит((

То есть при нажатии на Cells1 заполняеться Cells[1]..

Cells1 или Cell1 все-таки?
если Cell1, то
Cells[int(String(e.target.name).substr(4))] = ....


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

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