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

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

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

Регистрация: Sep 2008
Сообщений: 9
По умолчанию Область видимости переменной

Всем привет!
Есть вот такой код:

Код AS1/AS2:
var RegionsCount = 70;
var Regions:Array = new Array();
 
for (i=1; i<=RegionsCount; i++) {
	Regions[i] = "Region #"+i;	
} 
 
for (i=1; i<= RegionsCount ; i++)
{
  _root.logo_mc.rusmap['region'+i].onRollOver = function () {
 
	  _root.lefttoptext.text = _root.Regions[i];
  }
}
в целом всё работает, но в строке

Код AS1/AS2:
_root.lefttoptext.text = _root.Regions[i];
не видно переменную i
пробовал делать _root.i - не помогает.

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

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Код AS1/AS2:
var RegionsCount = 70;
var Regions:Array = new Array();
 
for (i = 1; i <= RegionsCount; i++) {
	Regions[i] = 'Region #' + i;
	 _root.logo_mc.rusmap['region' + i].num = i; //запомним номер внутри мувика
	 _root.logo_mc.rusmap['region' + i].onRollOver  = regionRollOver; //назначим функцию-обработчик
} 
 
function regionRollOver () {
	var k:Number = this.num; //извлечем номер
	_root.lefttoptext.text = _root.Regions[k];
}
Просто в вашем варианте в конце работы цикла i примет значение 71 (именно так), и именно это значение и будет использоваться для всех обработчиков.


Последний раз редактировалось mooncar; 09.04.2010 в 21:27.
Старый 09.04.2010, 20:39
AzagThoth вне форума Посмотреть профиль Отправить личное сообщение для AzagThoth Найти все сообщения от AzagThoth
  № 3  
Ответить с цитированием
AzagThoth
 
Аватар для AzagThoth

блогер
Регистрация: Sep 2009
Сообщений: 309
Записей в блоге: 4
Отправить сообщение для AzagThoth с помощью ICQ
Код AS1/AS2:
var RegionsCount = 70;
var Regions:Array = new Array();
 
for (i=1; i<=RegionsCount; i++) {
	Regions[i] = "Region #"+i;	
} 
 
for (i=1; i<= RegionsCount ; i++)
{
  _root.logo_mc.rusmap['region'+i].onRollOver = function (i:Number):Void {
 
	  _root.lefttoptext.text = _root.Regions[i];
  }
}
Так попробуйте. Не проверял. Но в теории должно работать.
__________________
Играй. Это жизнь.
Всё повторяется. Играй.

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

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Цитата:
Сообщение от AzagThoth Посмотреть сообщение
Так попробуйте. Не проверял. Но в теории должно работать.
Ни по теории, ни как не должно.
Функция-обработчик onRollOver не имеет аргументов, кроме ссылки на сам объект, событие которого обрабатывается (т.е. this) и на саму себя.

Старый 09.04.2010, 21:21
AzagThoth вне форума Посмотреть профиль Отправить личное сообщение для AzagThoth Найти все сообщения от AzagThoth
  № 5  
Ответить с цитированием
AzagThoth
 
Аватар для AzagThoth

блогер
Регистрация: Sep 2009
Сообщений: 309
Записей в блоге: 4
Отправить сообщение для AzagThoth с помощью ICQ
Да, Вы правы. Что то я потупил Сейчас проверил - действительно моё предложение сущий бред.
Код AS1/AS2:
i=10;
clip.onRollOver=function(i):Void{
	trace(i);
}
В отпут при наведении - undefined
А вот так:
Код AS1/AS2:
clip.i=10;
clip.onRollOver=function():Void{
	trace(this.i);
}
Всё как надо. Спасибо что указали на то, что НЕЛЬЗЯ передавать этой функции аргументы!
__________________
Играй. Это жизнь.
Всё повторяется. Играй.

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

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

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


 


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


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