Вызов кнопки из цикла for из прослушивателя событий другого объекта - PullRequest
0 голосов
/ 20 марта 2011

Я сделал 2 массива, один для названий частей насекомых, другой для частей насекомых, чтобы они загорелись. При наведении на кнопки, созданные массивом и циклом, загораются части и кнопки. Но я также хочу, чтобы части и кнопки загорались при наведении на части насекомых. Моя проблема в том, что я не знаю, как вызывать кнопки из цикла при переворачивании частей насекомого. См. Функции rollHandler2 и outHandler2.

//the arrays look like this...

var parts:Array= [ "Cervical sclerites", "Protonotopleural lobe", "Proepisternum",...]
var shapes:Array = [pt0, pt1, pt2, ...]


for (var i:int = 0; i < parts.length; i++){
    var b:MovieClip = new Btn();
    but.x = 15;
    but.y = ((i)*(b.height+1))+10;
    but.name = "b"+i;
    but.info.text = parts[i];
    but.buttonMode = true;
    but.info.mouseEnabled=false;
    addChild(b);
    but.addEventListener(MouseEvent.ROLL_OVER, rollHandler);
    but.addEventListener(MouseEvent.ROLL_OUT, outHandler);
    //b.addEventListener(MouseEvent.CLICK, outHandler);

}

for (var j:int = 0; j < shapes.length; j++){
    shapes[j].buttonMode = true;
    shapes[j].addEventListener(MouseEvent.ROLL_OVER, rollHandler2);
    shapes[j].addEventListener(MouseEvent.ROLL_OUT, outHandler2);
}

function rollHandler(event:MouseEvent):void {
    for (var i:int = 0; i < parts.length; i++) {
        if (event.currentTarget.name == "b"+i) {
            this.shapes[i].gotoAndStop("over");
            event.currentTarget.gotoAndStop("over");
        }
    }
}

function outHandler(event:MouseEvent):void {
    for (var i:int = 0; i < parts.length; i++) {
        if (event.currentTarget.name == "b"+i) {
            this.but[i].gotoAndStop("start");
            event.currentTarget.gotoAndStop("start");
        }
    }
}

function rollHandler2(event:MouseEvent):void {
    for (var i:int = 0; i < shapes.length; i++) {
        if (event.currentTarget == shapes[i]) {
            this.parts[i].gotoAndStop("over");
                        //How should i call the button b created from the parts loop?
            event.currentTarget.gotoAndStop("over");
        }
    }
}

function outHandler2(event:MouseEvent):void {
    for (var i:int = 0; i < shapes.length; i++) {
        if (event.currentTarget == shapes[i]) {
            this.b[i].gotoAndStop("start");
                        //same problem here.. Not sure how to call it.
            event.currentTarget.gotoAndStop("start");
        }
    }
}

1 Ответ

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

Я сделал некоторые изменения в вашем коде. посмотрите на комментарий, и вы поймете, что я имею в виду. Все мои комментарии помечены так: // --- Это пример комментария --- \\

//the arrays look like this...

var parts:Array= [ "Cervical sclerites", "Protonotopleural lobe", "Proepisternum",...];
var shapes:Array = [pt0, pt1, pt2, ...];
var buttons:Array = new Array(); //---Create new array to hold your buttons---\\


for (var i:int = 0; i < parts.length; i++){
    var b:MovieClip = new Btn();
    but.x = 15;
    but.y = ((i)*(b.height+1))+10;
    but.name = "b"+i;
    but.info.text = parts[i];
    but.buttonMode = true;
    but.info.mouseEnabled=false;
    buttons.push(b); //---Push your button into the array each time it loops---\\
    addChild(b);
    but.addEventListener(MouseEvent.ROLL_OVER, rollHandler);
    but.addEventListener(MouseEvent.ROLL_OUT, outHandler);
    //b.addEventListener(MouseEvent.CLICK, outHandler);

}

for (var j:int = 0; j < shapes.length; j++){
    shapes[j].buttonMode = true;
    shapes[j].addEventListener(MouseEvent.ROLL_OVER, rollHandler2);
    shapes[j].addEventListener(MouseEvent.ROLL_OUT, outHandler2);
}

function rollHandler(event:MouseEvent):void {
    for (var i:int = 0; i < parts.length; i++) {
        if (event.currentTarget.name == "b"+i) {
            this.shapes[i].gotoAndStop("over");
            event.currentTarget.gotoAndStop("over");
        }
    }
}

function outHandler(event:MouseEvent):void {
    for (var i:int = 0; i < parts.length; i++) {
        if (event.currentTarget.name == "b"+i) {
            this.but[i].gotoAndStop("start");
            event.currentTarget.gotoAndStop("start");
        }
    }
}

function rollHandler2(event:MouseEvent):void {
    for (var i:int = 0; i < shapes.length; i++) {
        if (event.currentTarget == shapes[i]) {
            this.parts[i].gotoAndStop("over");
                        //How should i call the button b created from the parts loop?
            buttons[i].gotoAndStop("over"); //---Then you call the button like this at each place.---\\
            event.currentTarget.gotoAndStop("over");
        }
    }
}

function outHandler2(event:MouseEvent):void {
    for (var i:int = 0; i < shapes.length; i++) {
        if (event.currentTarget == shapes[i]) {
            this.b[i].gotoAndStop("start");
                        //same problem here.. Not sure how to call it.
            event.currentTarget.gotoAndStop("start");
        }
    }
}

Надеюсь, это поможет!

...