Как я могу установить переменную внутри addEventListener Clicked Event? - PullRequest
0 голосов
/ 04 августа 2011

Я хочу сделать функцию, по которой щелкают, которая распознает элемент, по которому щелкают, это возможно? Не могли бы вы научить меня? ^^

Вот моя попытка, но она не сработала:

package  {

import flash.display.MovieClip;
import flash.events.MouseEvent;


public class main extends MovieClip {
    private var _s1:s1Mc;
    private var _s2:s2Mc;


    public function main() {
        _s1=new s1Mc();
        this.addChild(_s1);
        _s2=new s2Mc();
        this.addChild(_s2);

        _s1.addEventListener(MouseEvent.CLICK,ClickedF(_s1));
        _s2.addEventListener(MouseEvent.CLICK,ClickedF(_s2));
    }
    public function ClickedF(e:MouseEvent,$varMc:MovieClip)
    {
        if($varMc==_s1)
        trace("_s1");
        if($varMc==_s2)
        trace("_s2");
    }
}

}

Вот ошибки:

F:\test\click test\main.as, Line 18 1067: Implicit coercion of a value of type s1Mc to an unrelated type flash.events:MouseEvent.
F:\test\click test\main.as, Line 18 1136: Incorrect number of arguments.  Expected 2.
F:\test\click test\main.as, Line 19 1067: Implicit coercion of a value of type s2Mc to an unrelated type flash.events:MouseEvent.
F:\test\click test\main.as, Line 19 1136: Incorrect number of arguments.  Expected 2.

Я понимаю, что я должен установить 2 вещи внутри ClickedF addEventListener, но я действительно не знаю, как это сделать T_T

Ответы [ 2 ]

3 голосов
/ 04 августа 2011

В обработчике события может быть только один аргумент, но входящий объект Event имеет свойство currentTarget, то есть тот объект, который отправил событие.

public function main() {
    _s1=new s1Mc();
    this.addChild(_s1);
    _s2=new s2Mc();
    this.addChild(_s2);

    _s1.addEventListener(MouseEvent.CLICK,ClickedF);
    _s2.addEventListener(MouseEvent.CLICK,ClickedF);
}
public function ClickedF(e:MouseEvent)
{ 
    if(e.currentTarget==_s1)
    trace("_s1");
    if(e.currentTarget==_s2)
    trace("_s2");
}

Кроме того, по соглашениювы должны начинать имена своих функций со строчных букв.Только имена классов должны начинаться с заглавной буквы.Это облегчает понимание вашего кода, поскольку по соглашению ClickedF выглядит так, как будто вы передаете ссылку на класс, а не функцию.Когда вы работаете в команде разработчиков, соблюдение этих стандартов крайне важно для повышения производительности и, как правило, является требованием к рабочему месту, поэтому лучше привыкнуть к этому уже сейчас.

2 голосов
/ 04 августа 2011

Попробуйте это:

package  {

import flash.display.MovieClip;
import flash.events.MouseEvent;


public class main extends MovieClip {
    private var _s1:s1Mc;
    private var _s2:s2Mc;


    public function main() {
        _s1=new s1Mc();
        this.addChild(_s1);
        _s2=new s2Mc();
        this.addChild(_s2);

        _s1.addEventListener(MouseEvent.CLICK,ClickedF);
        _s2.addEventListener(MouseEvent.CLICK,ClickedF);
    }
    public function ClickedF(e:MouseEvent):void
    {
        var $varMc:MovieClip = MovieClip(e.currentTarget);
        if($varMc==_s1)
        trace("_s1");
        if($varMc==_s2)
        trace("_s2");
    }
}
}
...