Просмотр полной версии : Один код для всех кнопок.
gerasim13
11.07.2010, 22:33
У меня есть 256 кнопок на сцене 4х видом (отличия только внешние). При нажатии на кнопку, кнопка меняет свой цвет и значение переменной привязанной к кнопке (например knopka214.checked = true).
Как написав минимум кода заставить это все работать? Раньше решал подобную задачу с помощью цикла, но все это конечно далеко от совершенства. Как сделать правильно?
В таком духе:
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 групп кнопок:
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
назначить кнопкам один класс. как я понял - это всего 4 мувика.
class ColoredButton extends MovieClip
{
public var checked:Boolean = false;
public function onRelease():Void{
checked=!checked;
changeColor();
}
private function changeColor():Void{
//тут меняем цвет - не знаю как именно надо
}
}
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 ?
}
или я туплю спросони?
человек спросил как сделать без циклов и правильно, а вы опять ему циклов напихали)
gerasim13
12.07.2010, 00:46
Огромное спасибо! Да, цикл точно не нужен.
Да, не совсем уяснил, что требовалось автору. Биг зур пардон.
in4core, this там ссылается не на _root, а на кнопку, на которую нажали, поскольку btn.onPress = btnOnPress;
gerasim13
12.07.2010, 02:28
Странно, но я не могу заставить работать кнопку при повторном нажатии.
Если я добавляю условие в функцию то переменная checked всегда равна false.
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;
}
}
}
if (checked==false) {
Но правильнее писать
if (!checked) {
gerasim13
12.07.2010, 03:06
Спасибо! Совсем про это забыл
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.