Доступ к конкретному экземпляру в цикле - PullRequest
0 голосов
/ 07 сентября 2018

Я только начинаю изучать AS3 и столкнулся с проблемой, на которой я застрял. Я создал MovieClip с именем Button и добавил на мою сцену три экземпляра: button1, button2 и button3. Я хочу добиться того, чтобы при наведении курсора мыши на одну из кнопок я хотел, чтобы все остальные кнопки что-то делали; в моем примере: измените настройку alpha на 0,2. Я смог сделать это с большим количеством строк кода, но я хочу сократить код до минимума, используя операторы array и for each.

import flash.events.MouseEvent;

stop();

var arrayButtons:Array = [button1, button2, button3];
for each (var btn in arrayButtons) {
    btn.addEventListener(MouseEvent.MOUSE_OVER, onBtn);
    arrayButtons.splice[this, 1];
}

function onBtn(e:MouseEvent): void {
for (var i:Number = 0; i < arrayButtons.length; i++) {
    arrayButtons[i].alpha = 0.2;
}
}

line arrayButtons.splice[this, 1]; не работает, но я понятия не имею, на что мне следует это изменить. Есть мысли?

1 Ответ

0 голосов
/ 10 сентября 2018

Для объединения массива требуется два целых числа, а this не будет целым числом.

Даже если бы this было целым числом, о котором вы думали, оно бы перебирало и удаляло кнопку в каждом цикле, оставляя вас с пустым массивом. Я вижу, что вы пытались сделать - выделить массив без соответствующей кнопки для каждого обработчика.

Простой способ с вашим кодом - запустить проверку в цикле for вашего обработчика onBtn, чтобы увидеть, соответствует ли текущий элемент массива кнопке прокрутки (e.currentTarget). Если это не так, установите альфа.

Вам не нужно склеивать массив.

import flash.events.MouseEvent;

stop();

var arrayButtons:Array = [button1, button2, button3];
for each (var btn in arrayButtons) {
    btn.addEventListener(MouseEvent.MOUSE_OVER, onBtn);

    // remove the splice
    // arrayButtons.splice[this, 1];
}

function onBtn(e:MouseEvent): void {
    for (var i:Number = 0; i < arrayButtons.length; i++) {

        // if the current array element is not the current button, set alpha
        if(arrayButtons[i].name != e.currentTarget.name ){
        arrayButtons[i].alpha = 0.2;
        }

    }
}

(моды: я не смог разобраться с подсветкой кода as3 - раньше вы могли выделять синтаксис as3, но я давно пытался в SO?)

...