Форум 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=142061)

gerasim13 11.07.2010 22:33

Один код для всех кнопок.
 
У меня есть 256 кнопок на сцене 4х видом (отличия только внешние). При нажатии на кнопку, кнопка меняет свой цвет и значение переменной привязанной к кнопке (например knopka214.checked = true).
Как написав минимум кода заставить это все работать? Раньше решал подобную задачу с помощью цикла, но все это конечно далеко от совершенства. Как сделать правильно?

mooncar 11.07.2010 22:52

В таком духе:
Код AS1/AS2:

for (i = 1; i <= 50; i++) 
{
        var btn:MovieClip = _root['btn' + i]; //вводим ссылку на текущий в цикле мувик-кнопку
        btn.checked = false ;        //задаем некую переменную внутри мувика
        btn.col = new Color(btn); //создаем объект Color не где-нибудь, а прямо внутри мувика
        btn.onPress = btnOnPress; //назначем обработчик на его onPress
}
 
function btnOnPress ()
{
        this.checked = true ;  //меняем переменную
        this.col.setRGB(0xFF6600); //теперь легко можем обратиться к объекту Color данного мувика
}

Можно задать задать 4 разных цвета на смену текущему для 4 групп кнопок:
Код AS1/AS2:

var colors:Array = [0xFF6600, 0xFF0000, 0xFFCC00, 0x3366FF] ;
 
for (g = 0; g < 4; g++)
{
        var firstNum:Number = 64 * g; // = 0, 64, 128, 192
        var lastNum:Number = 64 * g + 63; // = 63, 127, 191, 255
 
        for (i = firstNum; i < lastNum; i++)
        {
                var btn:MovieClip = _root['btn' + (i + 1)];
                btn.checked = false ;       
                btn.col = new Color(btn);
                btn.futureColor = colors[g]; //для разновидностей - разные цвета
                btn.onPress = btnOnPress;
        }
}
 
function btnOnPress ()
{
        this.checked = true ;
        this.col.setRGB(this.futureColor);
}

Т.е. в данном примере группы кнопок имеют имена: btn1....btn64, btn65....btn128, btn129....btn192, btn193....btn256

Котяра 12.07.2010 00:11

назначить кнопкам один класс. как я понял - это всего 4 мувика.
Код AS1/AS2:

class ColoredButton extends MovieClip
{
        public var checked:Boolean = false;
 
        public function onRelease():Void{
            checked=!checked;
            changeColor();
        }
 
        private function changeColor():Void{
            //тут меняем цвет - не знаю как именно надо
        }
}


in4core 12.07.2010 00:29

Код AS1/AS2:

for (i = 1; i <= 50; i++) 
{
        var btn:MovieClip = _root['btn' + i]; //вводим ссылку на текущий в цикле мувик-кнопку
        btn.checked = false ;        //задаем некую переменную внутри мувика
        btn.col = new Color(btn); //создаем объект Color не где-нибудь, а прямо внутри мувика
        btn.onPress = btnOnPress; //назначем обработчик на его onPress
}
 
function btnOnPress ()
{
        this.checked = true ; 
        this.col.setRGB(0xFF6600);
        trace(this) // maybe _root ?
}

или я туплю спросони?

Котяра 12.07.2010 00:39

человек спросил как сделать без циклов и правильно, а вы опять ему циклов напихали)

gerasim13 12.07.2010 00:46

Огромное спасибо! Да, цикл точно не нужен.

mooncar 12.07.2010 01:41

Да, не совсем уяснил, что требовалось автору. Биг зур пардон.
in4core, this там ссылается не на _root, а на кнопку, на которую нажали, поскольку
Код AS1/AS2:

btn.onPress = btnOnPress;


gerasim13 12.07.2010 02:28

Странно, но я не могу заставить работать кнопку при повторном нажатии.
Если я добавляю условие в функцию то переменная checked всегда равна false.
Код AS1/AS2:

class loopseqSegment extends MovieClip {
        public var checked:Boolean = false;
 
        public function onRelease():Void {
                checked = !checked;
                changeAlpha();
                trace(checked);
        }
        private function changeAlpha():Void {
                if (checked=false) {
                        _alpha = 70;
                } else {
                        _alpha = 100;
                }
        }
}


iNils 12.07.2010 03:01

Код:

if (checked==false) {
Но правильнее писать
Код AS1/AS2:

if (!checked) {


gerasim13 12.07.2010 03:06

Спасибо! Совсем про это забыл


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

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