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

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

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

Регистрация: Feb 2012
Сообщений: 205
Question оптимизация скрипта, однотипные кнопки меню

Есть простенькое меню, 5 кнопок и 5 же всплывающих подменю.
Из-за того, необходимо будет на эти всплывающие подменю ставить SetInterval, то скрипт нужен общий на все кнопки.
Пока пусть только будет появление и пропадание по клику(задаём клик переменной k). Bt - кнопка главного меню, submenu - соответственно подменю.
Скрипя мозгами, наваяла это, но, естественно, не работает.
Код AS1/AS2:
for(i=1; i<=5; i++)
		{
			["bt"+i]onRelease=function()
			{
			  if(this._name==["bt"+i])
					{if (k!=1)
						{
						 for (b=1; b<=5; b++)
							{
							if(b!=i){["submenu_"+b]gotoAndStop(37);}
							else{["submenu_"+b]gotoAndPlay(2);}
							}
						 k=1;
						}
					}
			else
			    {
			    ["submenu_"+i]gotoAndPlay(21);
			    k=0;
			    }
			}
		}

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

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
В конце цикла i становится равным 6 и это значение будет использоваться во всех обработчиках.
Нужно так:
Код AS1/AS2:
for(i=1; i<=5; i++)
{
  var item:MovieClip = this['bt'+i];
  item.i = i; //"запоминаем" номер 
  item.onRelease = itemOnRelese; //назначаем обработчк
}
 
function itemOnRelese()
{
  var i:Number = this.i; //извлекаем номер
  //дальнейшие действия, используя полученное i
}
__________________
Идите первым!

Старый 30.06.2013, 23:38
Маруська вне форума Посмотреть профиль Отправить личное сообщение для Маруська Найти все сообщения от Маруська
  № 3  
Ответить с цитированием
Маруська

Регистрация: Feb 2012
Сообщений: 205
спасибо. работает =)

А теперь вот так:
Код AS1/AS2:
stop();
k=0;
 
 
for(i=1; i<=5; i++)
{
  var item:MovieClip = this['bt'+i];
  item.i = i; //"запоминаем" номер 
  item.onRelease = itemOnRelese; //назначаем обработчк
  item.onRollOut = itemOnRollOut;
}
 
function itemOnRelese()
{
  var i:Number = this.i; //извлекаем номер
  if (k!=1)
	{trace(k);
	 for (b=1; b<=5; b++)
		{
		 if(b!=i){_root["submenu_"+b].gotoAndStop(37);}
		 else{ 
		 		_root["submenu_"+b].gotoAndPlay(2);
		 		timer(i);
		 		trace("return"+inter); 
			} 
		k=1;}
 
	}
 
   else
	{
		trace(k);
		timeroff(i, inter);
	 _root["submenu_"+i].gotoAndPlay(21);
	 k=0;
	}
}
 
function itemOnRollOut()
{  
	k=0;
}
 
function timer(i) { trace (i);
					inter = setTimeout(go,5000,i);
					return(inter);
					}	
 
function timeroff(i, inter){trace(i+" off "+inter);
							clearTimeout(inter)}
function go(i){	
		trace("go");
		_root["submenu_"+i].gotoAndPlay(21);
		k=0;}
Как-о странно работает. Go вызывает по велению пятки. Что не так?


Последний раз редактировалось Маруська; 01.07.2013 в 08:50.
Старый 01.07.2013, 12:29
Маруська вне форума Посмотреть профиль Отправить личное сообщение для Маруська Найти все сообщения от Маруська
  № 4  
Ответить с цитированием
Маруська

Регистрация: Feb 2012
Сообщений: 205
primer.rar
Вот исходник CS4

Старый 02.07.2013, 19:47
Маруська вне форума Посмотреть профиль Отправить личное сообщение для Маруська Найти все сообщения от Маруська
  № 5  
Ответить с цитированием
Маруська

Регистрация: Feb 2012
Сообщений: 205
вопрос всё ещё открыт =(

Старый 02.07.2013, 23:27
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 6  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Мутный код. Сделайте ОДНУ кнопк и ОДНО подменю.
Упростите всё это.
К тому же ваш исходник у меня не открывается.
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 03.07.2013, 11:04
Маруська вне форума Посмотреть профиль Отправить личное сообщение для Маруська Найти все сообщения от Маруська
  № 7  
Ответить с цитированием
Маруська

Регистрация: Feb 2012
Сообщений: 205
когда одна кнопка и одно подменю - всё работает =)

Добавлено через 29 минут
Код AS1/AS2:
stop();
k=0;  //индикатор нажатия на кнопку. по первому клику на кнопку меню появляется, по повторному - исчезает
 
 
for(i=1; i<=5; i++)   //кнопок всего 5
{
  var item:MovieClip = this['bt'+i];
  item.i = i; //"запоминаем" номер 
  item.onRelease = itemOnRelese; //назначаем обработчик на клик
  item.onRollOut = itemOnRollOut; //назначаем обработчик на отведение мыши
}
 
function itemOnRelese()
{
  var i:Number = this.i; //извлекаем номер
  if (k!=1) //проверяем, что кнопка нажата впервые
	{for (b=1; b<=5; b++) //цикл на выбор субменю
		{
		  if(b!=i){_root["submenu_"+b].gotoAndStop(37);} //закрываем все открытые субменю, не относящиеся к нажатой кнопке
		  else{ //выполняется для субменю для нажатой кнопки
		 		_root["submenu_"+b].gotoAndPlay(2);
		 		timer(i) //задаём задержку для дальнейшего проигрывания субменю
			} 
		k=1; //меняем индекс - кнопка один раз нажата
               }
 
	}
 
   else
	{//кнопка нажата повторна
		timeroff(i, inter); //удаляем задержку для текущего субменю
	        _root["submenu_"+i].gotoAndPlay(21);//закрываем субменю
	 k=0; //возвращаем индикатор - кнопка не нажата
	}
}
 
function itemOnRollOut()
{  
	k=0;//возвращаем индикатор - кнопка не нажата
}
 
function timer(i) { 
			inter = setTimeout(go,5000,i);//вызываем закрытие субменю после задержки
			return(inter);
			}	
 
function timeroff(i, inter)
{
clearTimeout(inter)
}
 
function go(i)
{	
_root["submenu_"+i].gotoAndPlay(21);
k=0;// после автоматического закрытия меню по задержке, восстанавливаем индикатор - кнопка не нажата
}
Добавлено через 1 час 45 минут
По первому клику на кнопку таймер не срабатывает. после того, как кнопку закрыть и снова открыть кликом - таймер начинает работать. в чём проблема?

Добавлено через 2 часа 6 минут
Вот так чудно работает на одну кнопку.
Но как только добавляю условия на обработку других кнопок - всё кубарем =(

Код AS1/AS2:
stop();
k=0;
 
for(i=1; i<=5; i++)
{
  var item:MovieClip = this['bt'+i];
  item.i = i; //"запоминаем" номер 
  item.onRelease = itemOnRelese; //назначаем обработчк
}
 
function itemOnRelese()
{
  var i:Number = this.i; //извлекаем номер
  if (k!=1)
	{
	 for (b=1; b<=5; b++)
		{if (b==i){
		          _root["submenu_"+b].gotoAndPlay(2);
		          timer(i);
		          }	  
		k=1;
		} 
	}	 
   else
	{
	timeroff(i, inter);
	 _root["submenu_"+i].gotoAndPlay(21);
	 k=0;
	}
}
 
function timer(i) { 
			inter = setTimeout(go,5000,i);
			return(inter);
		       }	
 
function timeroff(i, inter){clearTimeout(inter)}
 
function go(i){	
		_root["submenu_"+i].gotoAndPlay(21);
		k=0;
}
Добавлено через 3 часа 50 минут
Всем спасибо. Нарисовала блок-схему - выявила проблему. Этот скрипт работает - если вдруг кому-то надо
Код AS1/AS2:
stop();
k=0;
 
for(i=1; i<=5; i++)
{
  var item:MovieClip = this['bt'+i];
  item.i = i; //"запоминаем" номер 
  item.onRelease = itemOnRelese; //назначаем обработчк
  item.onRollOut = itemOnRollOut;
}
 
function itemOnRelese()
{
  var i:Number = this.i; //извлекаем номер
  if (k!=1)
	{
	 for (b=1; b<=5; b++)
		{if (b==i){
		          _root["submenu_"+b].gotoAndPlay(2);
		          timer(i);
		          }	 
				  else {_root["submenu_"+b].gotoAndStop(40);}
		k=1;
		} 
	}	 
   else
	{
	timeroff(i, inter);
	 _root["submenu_"+i].gotoAndPlay(21);
	 k=0;
	}
}
 
function timer(i) { 
            clearTimeout(inter)
			inter = setTimeout(go,5000,i);
			return(inter);
		       }	
 
function timeroff(i, inter){clearTimeout(inter)}
 
function go(i){	
		_root["submenu_"+i].gotoAndPlay(21);
		k=0;
}
 
function itemOnRollOut()
{  
	k=0;
}


Последний раз редактировалось Маруська; 03.07.2013 в 14:56.
Старый 04.07.2013, 19:12
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 8  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Адрес , по которому высылаются эшелоны с ящиками пива можно найти в моем профиле.....
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 05.07.2013, 11:01
Маруська вне форума Посмотреть профиль Отправить личное сообщение для Маруська Найти все сообщения от Маруська
  № 9  
Ответить с цитированием
Маруська

Регистрация: Feb 2012
Сообщений: 205
был бы повод. Ведь Вы так мне помогли.

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

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

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


 


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


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