Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   составить подобное в одну функцию (http://www.flasher.ru/forum/showthread.php?t=119700)

MANN 28.12.2008 01:07

составить подобное в одну функцию
 
есть пять кнопок k1, k2, k3, k4, k5; каждая из них при нажатии загружает мп3 файл b1.mp3; b2.mp3; b3.mp3; b4.mp3; b5.mp3 соответсвенно
Как сделать что бы была одна функция и работала на пять кнопок?

вот у меня неработающий код
Код:

for (var z:Number = 1; z<=5; z++) {
        ["k"+z].onPress = function() {
                trace(z);
                stopAllSounds();
                ns = new Sound();
                ns.loadSound("b"+z+".mp3",true);
        };
}

самое что мне не понятно это: почему в output окне z = 6 ??
помогите разобратся плз

scarbo 28.12.2008 01:51

Блин не работают кнопки [code],
Код:

for(i=0;i<5;i++){
var mc = _root["k"+(i+1)];
mc.onPress = function(){
trace(this);
}
}

[iNils: Наверно потому, что надо ставить закрывающий тег]

gloomyBrain 28.12.2008 01:53

Интересно, при нажатии на которую кнопку trace выдает вам 6?

А вообще:
Код AS1/AS2:

function sayMyNumber(mc:MovieClip){
        trace(mc._name.slice(7))// потому что в слове button_ 7 букв
}
for(i=0; i<5;i++){
        var butt:MovieClip=this.attachMovie("butt", "button_"+i, this.getNextHighestDepth())// обратите внимание на новое имя
        butt._x=150
        butt._y=30+i*(butt._height+30)
        this.butt.onPress=function(){
                sayMyNumber(this)
        }
}


UPD
у меня работают =))

Wolsh 28.12.2008 03:50

Цитата:

Интересно, при нажатии на которую кнопку trace выдает вам 6?
На любую, естественно)) Подумайте, MANN, чему равна переменная z после того, как Ваш цикл выполнится? Точно, 6. Кнопка со всей честностью и выводит 6.
Код:

for (var z:Number = 1; z<=5; z++) {
        var b:MovieClip = this["k"+z];
        b.id = z;
        b.onPress = loadSoundByID;
}
function loadSoundByID() {
        trace(this.id);
        stopAllSounds();
        ns = new Sound();
        ns.loadSound("b"+this.id+".mp3",true);
};


MANN 28.12.2008 16:27

Благодарю;
Всё работает, осталось понять принцип работы кода^^

Wolsh 28.12.2008 17:41

Какого из?))) На всякий случай я о своем:
1.Заводим итератор z и запускаем цикл... Перед каждым витком цикла выполняется итерация z++. Надо помнить, что такая запись сначала возвращает z, а уже потом увеличивает ее значение на 1, в отличие от записи ++z))) Итак, когда последний виток цикла запускается, для него z не может быть больше пяти, но вне функции z=6.
Эту 6 Вам и выводил трейс.
2. Заводим переменную b под тип данных МувиКлип. В нее записываем ссылку на this["k"+z] - одну из Ваших кнопок.
3. У этой кнопки заводим свойство id и записываем в него значение итератора. Кнопка теперь будет его "помнить".
4. В качестве обработчика события нажатия указываем кнопке функцию loadSoundByID. Собственно, тут синтаксис в точности как в записи b.id=z
При нажатии на кнопку будет вызвана функция loadSoundByID, и она получит ссылку на "вызвавшего" (такова специфика обработчиков) - Вашу кнопку, которая внутри функции будет доступна как this . Cоответственно, ее id будет доступен как this.id


Часовой пояс GMT +4, время: 01:58.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.