Flash AS3 - MouseEvent - PullRequest
       11

Flash AS3 - MouseEvent

0 голосов
/ 21 марта 2011

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

У меня есть функция

    public function backToSelect(evt:Event, i:Number):void
    {
        removeChild(back);
        switch(i)   {
            case 1:
                removeChild(speel1);
                break;
            //etc
        }
        gotoAndStop('home');

     }

Я не знаю, как вызвать эту функцию. Я пытался сделать

        back.addEventListener(MouseEvent.CLICK, backToSelect(1));

Но тогда вспышка жалуется:

1067: Implicit coercion of a value of type int to an unrelated type flash.events:Event.

Я понимаю свою ошибку здесь, я пропустил первый аргумент (а именно Событие) при выполнении backToSelect(1). Тем не менее, я не знаю, что поместить туда, чтобы правильно вызывать мою функцию. Я перепробовал все, от evt:MouseEvent до MouseEvent и прочее. Ничего не получалось. Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 21 марта 2011

Таким образом, система событий во Flash как бы запекается - когда вы используете «addEventListener ()», вы говорите: «Эй, когда вы получаете событие типа X, передайте это событие функцииЭта функция принимает один аргумент, то есть событие, которое я слушаю. "

Вы на самом деле не делаете вызов функции внутри" addEventListener () "- вы передадите в backToSelect, а не backToSelect ().Разница в том, что первая ссылка на эту функцию - вы не говорите "Вызовите эту функцию сейчас!"Вы говорите: «Отложите это и используйте его всякий раз, когда происходит это событие».Это невероятно распространенная проблема для новичков в среде Flash, и решение не обязательно очевидно.То, что вы хотите сделать, это найти способ связать ваши данные с целью щелчка мыши.Самый простой способ сделать это - просто что-то вроде этого:

public function backToSelect(evt:Event):void
    {
        removeChild(back);
        switch(e.currentTarget)   {
            case buttonOne:
                removeChild(speel1);
                break;
            //etc
        }
        gotoAndStop('home');

     }

Без более полного понимания того, что вы пытаетесь сделать, мне сложно дать вам более конкретный совет, но это кореньЭто.Вы можете поместить всю свою логику в обработчик кликов или сделать что-то более изощренное, например, создать объект Dictionary, который связывает числа с кнопками, а затем просто использовать num = myDictionary [e.currentTarget] или любой другой.

Но да, это то, что происходит там, в ядре.Надеюсь, это поможет, дайте мне знать, если вам нужна более конкретная помощь!

1 голос
/ 21 марта 2011

Если вы хотите вызвать конкретную функцию, это можно сделать следующим образом:

  back.addEventListener(MouseEvent.CLICK, 
       function (evt:MouseEvent):void { backToSelect(evt, 1); } );

Этот оператор функции-оболочки является анонимной функцией с точной сигнатурой, которую ActionScript ожидает для обработчика MouseEvent.CLICK.Тем не менее, правильный способ приведен ниже:

  // somewhere else in your class, presumably...
  function mouseEventHandler(evt:MouseEvent):void {
      backToSelect(evt, 1);
  }

  back.addEventListener(MouseEvent.CLICK, mouseEventHandler);

Это позволит вам удалить обработчик, если потребуется, позже.

...