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

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

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

Регистрация: Jun 2002
Адрес: on the backyard
Сообщений: 285
Отправить сообщение для greep с помощью ICQ
По умолчанию Проблема с массивом.

У меня проблема с массивом... В руте, в первом и единственном кадре 19 кнопок (b1,b2,b3...b19) и следующий код:
Код AS1/AS2:
my_array = new Array(247, 233, 221, 208, 194, 181, 169, 155, 142, 129, 116, 104, 91, 78, 65, 52, 39, 26, 13);
for(i = 1; i<20; i++){
	this["b"+i].onRelease = function(){
		trace(my_array[_root.i+1]);
	}
}
Событие release работает нормально, но трейс выдаёт undifinded... ПОЧЕМУ?!?!

Старый 24.03.2011, 16:59
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Потому, что на момент нажатия на кнопку, ваша переменная i будет иметь значение 19. А когда вы трейсите, то пытаетесь вывести my_array[20], которого не существует.

Кстати функцию onRelease можно вынести, а не дублировать.
__________________
hauts.ru

Старый 24.03.2011, 18:15
greep вне форума Посмотреть профиль Отправить личное сообщение для greep Найти все сообщения от greep
  № 3  
Ответить с цитированием
greep
 
Аватар для greep

Регистрация: Jun 2002
Адрес: on the backyard
Сообщений: 285
Отправить сообщение для greep с помощью ICQ
2 Hauts: Да, я уже сообразил, что и в итоге 20 и такой переменной в массиве нет, но не понятно почему я не вижу в окне output все данные массива? Еще очень интересно что вы имели в виду под "вынести"? Можете пояснить? Заранее благодарен.

Старый 24.03.2011, 18:39
petyar вне форума Посмотреть профиль Отправить личное сообщение для petyar Найти все сообщения от petyar
  № 4  
Ответить с цитированием
petyar

Регистрация: Sep 2005
Сообщений: 106
Цитата:
Сообщение от greep Посмотреть сообщение
2 Hauts: Да, я уже сообразил, что и в итоге 20 и такой переменной в массиве нет, но не понятно почему я не вижу в окне output все данные массива?
Вы не поняли. Вы пытаетесь трейсить элемент i+1, которого не существует при нажатии на любую кнопку. А что вы собираетесь в таком случае увидеть то? Если нужна именно такая реализация, то попробуйте через имя самой кнопки, примерно так:
Код AS1/AS2:
for(i = 1; i<20; i++){
	this["b"+i].onRelease = function(){
		trace(my_array[this._name.substr(1, 2)]);
	}
}

Старый 24.03.2011, 18:45
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 5  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Имя-то зачем?

Код AS1/AS2:
my_array = [247, 233, 221, 208, 194, 181, 169, 155, 142, 129, 116, 104, 91, 78, 65, 52, 39, 26, 13];
for(var i = 1; i<20; i++){
    var clip = this["b"+i];
    clip.onRelease = myClipOnRelease;
    clip.id = i;
}
function myClipOnRelease(){
    trace(this +" id="+ this.id);
}

Хотя, возможно, я вас неправильно понял.
__________________
hauts.ru

Старый 24.03.2011, 19:13
kseniya вне форума Посмотреть профиль Отправить личное сообщение для kseniya Найти все сообщения от kseniya
  № 6  
Ответить с цитированием
kseniya
 
Аватар для kseniya

Регистрация: Oct 2010
Адрес: Новосиб
Сообщений: 122
а можно ещё вот так:
Код AS1/AS2:
my_array = new Array(247, 233, 221, 208, 194, 181, 169, 155, 142, 129, 116, 104, 91, 78, 65, 52, 39, 26, 13);
for (i = 1; i < 20; i++) {
	init(i);
}
function init(i) {
	this["b" + i].onRelease = function() {
		trace(my_array[i - 1]);
	};
}


Последний раз редактировалось kseniya; 24.03.2011 в 19:17.
Старый 24.03.2011, 19:30
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 7  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
kseniya, в вашем коде создается мнежество функций, которые будут висеть в памяти, а в моем примере — всего одна, так лучше.
__________________
hauts.ru

Старый 24.03.2011, 22:22
greep вне форума Посмотреть профиль Отправить личное сообщение для greep Найти все сообщения от greep
  № 8  
Ответить с цитированием
greep
 
Аватар для greep

Регистрация: Jun 2002
Адрес: on the backyard
Сообщений: 285
Отправить сообщение для greep с помощью ICQ
Спасибо

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

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

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


 


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


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