Кнопка вызова в Action Script 3.0 - PullRequest
0 голосов
/ 18 июня 2010

Я пытаюсь сделать панель кнопок. у каждой кнопки есть два типа btn_home и btn_home_white. Я пытаюсь добраться до этих кнопок. Работать, если я пишу для каждой кнопки свои собственные методы, такие как

btn_home.addEventListener(MouseEvent.MOUSE_OVER,overEffect);
btn_home_white.addEventListener(MouseEvent.MOUSE_OUT,outEffect);

   function overEffect(e:MouseEvent)
{
var myTweenHight:Tween = new Tween( btn_home,"height",Bounce.easeOut,25,0,3,true);

var myTweenHight2:Tween = new        Tween(btn_home_white,"height",Bounce.easeOut,0,25,3,true);
var myTweenAlpha:Tween = new Tween(btn_home_white,"alpha",Strong.easeOut,0,1,2,true);

}

function outEffect(e:MouseEvent)
{
var myTweenHight:Tween = new Tween btn_home,"height",Bounce.easeOut,0,25,3,true);

var myTweenHight2:Tween = new Tween(btn_home_white,"height",Bounce.easeOut,25,0,3,true);
var myTweenAlpha:Tween = new Tween(btn_home_white,"alpha",Strong.easeOut,1,0,2,true);

}

Но у меня есть 10 кнопок как btn_buttonname и btn_buttonname_white. Я пытался создать прослушиватель событий на сцене для всех. Он работает для кнопок первого типа btn_buttonname, но как мне получить кнопки второго типа? Я попробовал e.target["_white"], но это не работает.

stage.addEventListener(MouseEvent.MOUSE_OVER , overEffect);
stage.addEventListener(MouseEvent.MOUSE_OUT , outEffect);

function overEffect(e:MouseEvent)
{
var myTweenHight:Tween = new Tween(e.target,"height",Bounce.easeOut,25,0,3,true);
trace("height");
var myTweenHight2:Tween = new        Tween(e.target["_white"],"height",Bounce.easeOut,0,25,3,true);
var myTweenAlpha:Tween = new Tween(e.target["_white"],"alpha",Strong.easeOut,0,1,2,true);

}

function outEffect(e:MouseEvent)
{
var myTweenHight:Tween = new Tween(e.target,"height",Bounce.easeOut,0,25,3,true);

var myTweenHight2:Tween = new Tween(e.target["_white"],"height",Bounce.easeOut,25,0,3,true);
var myTweenAlpha:Tween = new Tween(e.target["_white"],"alpha",Strong.easeOut,1,0,2,true);

}

EDIT: Я сделал так, чтобы Даниэль Карвалью грустно добавил для каждой кнопки прослушиватель событий. Теперь это работает, но если я переместил мышь на кнопку к другой кнопке, предыдущая кнопка не превратится в исходную форму.

btn_home.addEventListener(MouseEvent.MOUSE_OVER,overEffect);
btn_home_white.addEventListener(MouseEvent.MOUSE_OUT,outEffect);
btn_contact.addEventListener(MouseEvent.MOUSE_OVER,overEffect);
btn_contact_white.addEventListener(MouseEvent.MOUSE_OUT,outEffect);
btn_menu.addEventListener(MouseEvent.MOUSE_OVER,overEffect);
btn_menu_white.addEventListener(MouseEvent.MOUSE_OUT,outEffect);
btn_restaurant.addEventListener(MouseEvent.MOUSE_OVER,overEffect);
btn_restaurant_white.addEventListener(MouseEvent.MOUSE_OUT,outEffect);
btn_rezervation.addEventListener(MouseEvent.MOUSE_OVER,overEffect);
btn_rezervation_white.addEventListener(MouseEvent.MOUSE_OUT,outEffect);
function overEffect(e:MouseEvent)
{
switch (e.target)
{
    case ( btn_home) :
        {
            var HomeTweenHight:Tween = new Tween(btn_home,"height",Bounce.easeOut,25,0,0.5,true);

            var HomeTweenHight2:Tween = new Tween(btn_home_white,"height",Bounce.easeOut,0,25,0.5,true);
            var HomeTweenAlpha:Tween = new Tween(btn_home_white,"alpha",Strong.easeOut,0,1,2,true);
            break;

        };
    case ( btn_contact) :
        {
            var ContactTweenHight:Tween = new Tween(btn_contact,"height",Bounce.easeOut,25,0,0.5,true);
            var ContactTweenHight2:Tween = new Tween(btn_contact_white,"height",Bounce.easeOut,0,25,0.5,true);
            var ContactTweenAlpha:Tween = new Tween(btn_contact_white,"alpha",Strong.easeOut,0,1,2,true);
            break;

        };
    case ( btn_menu) :
        {
            var MenuTweenHight:Tween = new Tween(btn_menu,"height",Bounce.easeOut,25,0,0.5,true);
            var MenuTweenHight2:Tween = new Tween(btn_menu_white,"height",Bounce.easeOut,0,25,0.5,true);
            var MenuTweenAlpha:Tween = new Tween(btn_menu_white,"alpha",Strong.easeOut,0,1,2,true);
            break;

        };
    case ( btn_restaurant) :
        {
            var RestourantTweenHight:Tween = new Tween(btn_restaurant,"height",Bounce.easeOut,25,0,0.5,true);
            var RestourantTweenHight2:Tween = new Tween(btn_restaurant_white,"height",Bounce.easeOut,0,25,0.5,true);
            var RestourantTweenAlpha:Tween = new Tween(btn_restaurant_white,"alpha",Strong.easeOut,0,1,2,true);
            break;

        };
    case (btn_rezervation) :
        {
            var RezervationTweenHight:Tween = new Tween(btn_rezervation,"height",Bounce.easeOut,25,0,0.5,true);
            var RezervationTweenHight2:Tween = new Tween(btn_rezervation_white,"height",Bounce.easeOut,0,25,0.5,true);
            var RezervationTweenAlpha:Tween = new Tween(btn_rezervation_white,"alpha",Strong.easeOut,0,1,2,true);
            break;

    }
}
};

function outEffect(e:MouseEvent)
{
switch (e.target)
{

    case (btn_home_white) :
        {
            var HomeTweenHight:Tween = new Tween(btn_home,"height",Bounce.easeOut,0,25,0.5,true);
            var HomeTweenHight2:Tween = new Tween(btn_home_white,"height",Bounce.easeOut,25,0,0.5,true);
            var HomeTweenAlpha:Tween = new Tween(btn_home_white,"alpha",Strong.easeOut,1,0,2,true);
            break;


        };
    case (btn_contact_white) :
        {
            var ContactTweenHight:Tween = new Tween(btn_contact,"height",Bounce.easeOut,0,25,0.5,true);
            var ContactTweenHight2:Tween = new Tween(btn_contact_white,"height",Bounce.easeOut,25,0,0.5,true);
            var ContactTweenAlpha:Tween = new Tween(btn_contact_white,"alpha",Strong.easeOut,1,0,2,true);
            break;


    }
    case (btn_menu_white) :
        {
            var MenuTweenHight:Tween = new Tween(btn_menu,"height",Bounce.easeOut,0,25,0.5,true);
            var MenuTweenHight2:Tween = new Tween(btn_menu_white,"height",Bounce.easeOut,25,0,0.5,true);
            var MenuTweenAlpha:Tween = new Tween(btn_menu_white,"alpha",Strong.easeOut,1,0,2,true);
            break;


    };
    case (btn_restaurant_white) :
        {
            var RestourantTweenHight:Tween = new Tween(btn_restaurant,"height",Bounce.easeOut,0,25,0.5,true);
            var RestourantTweenHight2:Tween = new Tween(btn_restaurant_white,"height",Bounce.easeOut,25,0,0.5,true);
            var RestourantTweenAlpha:Tween = new Tween(btn_restaurant_white,"alpha",Strong.easeOut,1,0,2,true);
            break;


    };
    case (btn_rezervation_white) :
        {
            var RezervationTweenHight:Tween = new Tween(btn_rezervation,"height",Bounce.easeOut,0,25,0.5,true);
            var RezervationTweenHight2:Tween = new Tween(btn_rezervation_white,"height",Bounce.easeOut,25,0,0.5,true);
            var RezervationTweenAlpha:Tween = new Tween(btn_rezervation_white,"alpha",Strong.easeOut,1,0,2,true);
            break;


    };

}
};

Ответы [ 2 ]

1 голос
/ 18 июня 2010

Ваша цель e.target должна работать, хотя вам (насколько я вижу) не нужна кнопка [_"white"] after e.target для кнопок _white. Причина, по которой e.targets не работает, заключается в том, что вы просто добавляете слушателей событий на сцену, а не отдельные кнопки.

Я вижу два варианта (возможно, есть и другие): вручную выполнить запись прослушивателей событий для каждой кнопки или поместить все кнопки, которые будут использовать функцию overEffect, в один массив, а все кнопки, использующие функцию outEffect, в другой массив. ,

Затем создайте два цикла for и пройдитесь по этим массивам, добавив прослушиватели событий каждому дочернему элементу массива. Ваш код e.target должен работать в этот момент.

Дайте мне знать, если у вас возникнут какие-либо проблемы, надеюсь, это поможет.

Debu

0 голосов
/ 18 июня 2010

Вот краткий пример, который может вам помочь:

http://wonderfl.net/c/vhay

function createButton():MovieClip{
    var button:MovieClip=new MovieClip();
    var stateA:Shape=new Shape();
    var g:Graphics = stateA.graphics;
    g.beginFill(0xFF0000);
    g.drawRect(0, 0, 10, 10);
    g.endFill();
    button["stateA"] = stateA;
    button.addChild(stateA);
    var stateB:Shape=new Shape();
    g = stateB.graphics;
    g.beginFill(0x00FF00);
    g.drawRect(0, 0, 10, 10);
    g.endFill();
    button["stateB"] = stateB;
    button.addChild(stateB);
    stateB.visible=false;
    return button;
}
var nbButtons:int=10;
var buttons:Array=[];
var selectButton:MovieClip;
for (var i : int = 0;i < nbButtons; i++) {
    var button:MovieClip=createButton();
    addChild(button);
    button.y=10;
    button.x=i*12+10;
    addChild(button);
    buttons.push(button);
    setUpButton(button);
}
function setUpButton(button:MovieClip):void {
    button.buttonMode=true;
    button.addEventListener(MouseEvent.ROLL_OVER, buttonRollOver);
    button.addEventListener(MouseEvent.ROLL_OUT, buttonRollOut);
    button.addEventListener(MouseEvent.CLICK, buttonClick);
}
function buttonClick(e:Event):void{
    switchButtonStateToNotSelected();
    switchButtonStateToSelected(e.currentTarget as MovieClip);
}
function switchButtonStateToSelected(button:MovieClip):void{
    button.buttonMode=true;
    button.removeEventListener(MouseEvent.ROLL_OVER, buttonRollOver);
    button.removeEventListener(MouseEvent.ROLL_OUT, buttonRollOut);
    button.removeEventListener(MouseEvent.CLICK, buttonClick);
    button["stateA"]["visible"]=false;
    button["stateB"]["visible"]=true;
    selectButton=button;
}
function switchButtonStateToNotSelected():void{
    if(selectButton) {
        setUpButton(selectButton);
        selectButton["stateA"]["visible"]=true;
        selectButton["stateB"]["visible"]=false;
        selectButton=null;
    }
}
function buttonRollOver(e:Event):void{
    e.currentTarget["stateA"]["visible"]=false;
    e.currentTarget["stateB"]["visible"]=true;
}
function buttonRollOut(e:Event):void{
    e.currentTarget["stateA"]["visible"]=true;
    e.currentTarget["stateB"]["visible"]=false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...