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

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

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

Регистрация: Apr 2002
Адрес: СПб
Сообщений: 288
По умолчанию генерация случайного индекса двумерного массива

Подскажите, пожалуйста.
имеется двумерный массив
мне нужно получать значение случайной ячейки этого массива по таймеру
для этого вычисляю случайное число первого индекса - r_arr и случайное число второго индекса - r_it

Код AS1/AS2:
var picsArray = [];
picsArray[0]=["00","01","02","03"];
picsArray[1]=["10","11","12","13","14","15"];
picsArray[2]=["20","21","22","23","24","25","26","27"];
 
intervalId = setInterval(random_f, 3000);
 
function random_f() {
	_root.onEnterFrame = function() {
		if (_root.r_arr_old == _root.r_arr) {
			_root.r_arr = Math.round(Math.random()*3);
		} else {
			_root.r_arr_old = _root.r_arr;
                                       _root.r_it = Math.round(Math.random()*_root.picsArray[r_arr].length)
			trace("_root.r_arr "+_root.r_arr);
			trace("_root.r_it "+_root.r_it);
			delete _root.onEnterFrame;
		}
	};
}
при тестировании периодически выдает _root.r_it NaN
Как с этим бороться?
__________________
Хватит клавиши топтать... :mad:

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Math.round Math.floor
Почему? Потому, что Math.floor всегда округляет в меньшую сторону, поэтому значения будут в диапазоне 0..length-1, что и нужно для доступа к массиву, а Math.round может округлить в большую, поэтому будет давать диапазон 0..length.
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 21.05.2012 в 11:38.
Старый 17.05.2012, 08:38
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 3  
Ответить с цитированием
Hauts
 
Аватар для Hauts

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

Если структурировать то, что вам нужно, то получатся следующие действия:

1. Загрузить xml с путями до файлов, в которых прописаны пути до картинок

2. Прочитать xml и занести в массив все пути до файлов

3. Начать загрузку всех файлов

4. После загрузки какого-либо файла, заносить его содержимое в массив путей до картинок. При этом массив не должен быть двумерным, — это избыточно и только усложняет дальнейшую работу.

5. Так же, после загрузки какого-либо файла, сравнивать общее кол-во загруженых файлов с кол-вом файлов, которое указано в xml

6. Когда все файлы загружены, мы уверены в том, что в массив с путями до картинок занесены все пути, которые должны быть, поэтому переходим к следующему шагу, — создаем с помощью createEmptyMovieClip для каждой картинки мувиклип-контейнер, в который будет загружаться эта картинка. Это нужно для того, чтобы не загружать каждый раз одну и ту же картинку, а загрузить их один раз, а далее, уже с помощью _visible (или _alpha) менять видимость этой картинки.

7. Каждому контейнеру, в который будет загружена картинка, делаем _visible = false

8. Каждый контейнер заносим в массив, — это нужно для того, чтобы было проще выбирать произвольную картинку для показа

9. С помощью MovieClipLoader загружаем картинки и аналогичным образом, как с файлами, после очередного события загрузки сравниваем кол-во загруженных картинок с их общим кол-вом.

10. Как только все картинки загрузились, запускаем функцию показа произвольной картинки по интервалу, с помощью функции setInterval.

И на этом моменте у вас получится массив с контейнерами, в котороых лежат картинки, и у каждого контейнера _visible = false. В функции показа произвольной картинки запоминаем тот контейнер, который показывается, потом генерируем новый контейнер, который должен показываться и, если текущий контейнер и новый совпадают — генерируем еще раз. Это для того, чтобы избежать ситуации, когда показывается, например, первая картинка, потом опять же, первая, потому, что Math.random() выдал такое число.
__________________
hauts.ru

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

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

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


 


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


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