Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.07.2010, 22:33
gerasim13 вне форума Посмотреть профиль Отправить личное сообщение для gerasim13 Найти все сообщения от gerasim13
  № 1  
Ответить с цитированием
gerasim13

Регистрация: Jul 2008
Сообщений: 35
По умолчанию Один код для всех кнопок.

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

Старый 11.07.2010, 22:52
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
В таком духе:
Код 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


Последний раз редактировалось mooncar; 11.07.2010 в 23:19.
Старый 12.07.2010, 00:11
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 3  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
назначить кнопкам один класс. как я понял - это всего 4 мувика.
Код AS1/AS2:
class ColoredButton extends MovieClip
{
         public var checked:Boolean = false;
 
         public function onRelease():Void{
             checked=!checked;
             changeColor();
         }
 
         private function changeColor():Void{
            //тут меняем цвет - не знаю как именно надо
         }
}
__________________
Отряд Котовскага

Старый 12.07.2010, 00:29
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 4  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Код 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
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 5  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
человек спросил как сделать без циклов и правильно, а вы опять ему циклов напихали)
__________________
Отряд Котовскага

Старый 12.07.2010, 00:46
gerasim13 вне форума Посмотреть профиль Отправить личное сообщение для gerasim13 Найти все сообщения от gerasim13
  № 6  
Ответить с цитированием
gerasim13

Регистрация: Jul 2008
Сообщений: 35
Огромное спасибо! Да, цикл точно не нужен.

Старый 12.07.2010, 01:41
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 7  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Да, не совсем уяснил, что требовалось автору. Биг зур пардон.
in4core, this там ссылается не на _root, а на кнопку, на которую нажали, поскольку
Код AS1/AS2:
btn.onPress = btnOnPress;

Старый 12.07.2010, 02:28
gerasim13 вне форума Посмотреть профиль Отправить личное сообщение для gerasim13 Найти все сообщения от gerasim13
  № 8  
Ответить с цитированием
gerasim13

Регистрация: Jul 2008
Сообщений: 35
Странно, но я не могу заставить работать кнопку при повторном нажатии.
Если я добавляю условие в функцию то переменная 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;
		}
	}
}

Старый 12.07.2010, 03:01
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 9  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Код:
if (checked==false) {
Но правильнее писать
Код AS1/AS2:
if (!checked) {
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 12.07.2010, 03:06
gerasim13 вне форума Посмотреть профиль Отправить личное сообщение для gerasim13 Найти все сообщения от gerasim13
  № 10  
Ответить с цитированием
gerasim13

Регистрация: Jul 2008
Сообщений: 35
Спасибо! Совсем про это забыл

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:58.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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