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

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

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

Регистрация: Mar 2009
Сообщений: 2
По умолчанию загрузка случайных клипов без повтора

проблемма: загрузка нескольких случайных клипов на сцену из массива так, чтобы они не повторялись.
На форуме нашел несколько сообщении на эту тему. Мне не удалось привязать их к моему примеру. Или не работало или было черезчур сложно. Хорошо бы остаться в рамках Flash MX
Пробую следующее

Код AS1/AS2:
myArray = new Array("a", "b", "c", "d");
 {
	var r = Math.ceil(Math.random(1)*4);
 
	attachMovie("mc"+r, "mcr",0, {_x:210, _y:220});
 
	myArray2 = myArray.splice("mc"+r,1); 
 
	var p = Math.ceil(Math.random(1)*3);
	attachMovie("mc"+p, "mcp",10, {_x:310, _y:320});
}
Два клипа из 4 появляются на сцене, но время от времени они повторяются
/myArray2 = myArray.splice("mc"+r,1);/ или не работает или работает не верно(удаляет не тот клип)
В реальности клипов будет 50, из них 30 случаиных должны появится на сцене, но не повторятся.
Кто поможет?


Последний раз редактировалось iNils; 18.03.2009 в 13:11.
Старый 18.03.2009, 11:35
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 2  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
Ну за детсад.. Я ж тебе отписал уже:
Код AS1/AS2:
function myRandNumber(min:Number, max:Number):Number 
{
var randomNumb:Number = Math.round(Math.random() * (max - min)) + min;
return randomNumb;
}
 
function getRandomIntArray(len:Number):Array 
{
var A:Array = [];
var found:Boolean = false;
var un:Number;
 
while (A.length != len) 
{
 un = myRandNumber(1, len);
 found = false;
 for (var i = 0; i < A.length; i++) 
 {
  if (A[i] == un) 
  {
    found = true;
    break;
  }
 }
  if (!found) A.push(un);
}
return A;
}
 
var rand_arr:Array = getRandomIntArray(50); // так применяем
var rand:Number;
trace(rand_arr)
 
for (var i:Number = 0; i < 30; i++)
{
     rand = rand_arr[i];
     trace(rand)
}

Старый 18.03.2009, 13:03
_SAM_ вне форума Посмотреть профиль Отправить личное сообщение для _SAM_ Посетить домашнюю страницу _SAM_ Найти все сообщения от _SAM_
  № 3  
Ответить с цитированием
_SAM_

Регистрация: May 2007
Сообщений: 159
Отправить сообщение для _SAM_ с помощью ICQ
Создаешь массив, Берешь за индекс массива "i" рондомешь его в указанных рамках:


Цитата:
Пример

В следующем примере возвращается случайное число в указанном диапазоне.
Код AS1/AS2:
function randRange(min:Number, max:Number):Number {
  var randomNum:Number = Math.round(Math.random()*(max-min))+min;
  return randomNum;
}
for (var i = 0; i<25; i++) {
  trace(randRange(4, 11));
}
Подгружаешь клип в первый слой, адрес берешь с массива, и адрес подгруженной картинки удаляешь с массива Array.splice()
Потом опять генеришь случайное число от 0 до Array.length() — количество элементов в массиве, грузишь клип, удаляешь... и так пока не выгрузишь все.
Тебе надо:
http://www.flasher.ru/forum/showthread.php?t=93300
там класс Мath и Array

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
niks77, для оформления своего кода, надо использовать теги [code][/code].
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 18.03.2009, 14:09
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 5  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
_SAM_ извиняюсь, но чем предложенный тобой способ отличается от моего? Если хочется диапазон не с 1, а от N то неужто трудно добавить аргумент типа
Код AS1/AS2:
function getRandomIntArray(N:Number, len:Number):Array
.......
 un = myRandNumber(N, len);
....
Просто данный вариант заточен именно под галереи где счет идет с 1 \ 0...

Старый 18.03.2009, 14:59
niks77 вне форума Посмотреть профиль Отправить личное сообщение для niks77 Найти все сообщения от niks77
  № 6  
Ответить с цитированием
niks77

Регистрация: Mar 2009
Сообщений: 2
nOobCrafter
На счет детсада - верно. Мне как раз под 60. Скоро снова в дет сад пора....
По сути... Возможно и даже уверен твой скрипт очень хорош. Пробую с ним чего то делать. Ничего не получается ( у меня Flash MX).
Просьба простая: конкретный работающии скрипт: 4 mc, 2 случайных из них грузятся на сцену в определенные точки причем не повторяясь( см.выше)
_SAM_
По этому пути я и шел. Создал массив. Случаиный член атачится на сцену, затем создаю массив2 за вычетом использованного члена первоначального массива и рандомно опять attach. Однако здесь /myArray2 = myArray.splice("mc"+r,1);/что то не верно. Что?

А вообще, всем спасибо

Старый 18.03.2009, 15:29
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 7  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
итак, в библиотеке имеем 4 мувика с линкейдж именами btn1, btn2, btn3, btn4...
Код AS1/AS2:
function myRandNumber(min:Number, max:Number):Number 
{
var randomNumb:Number = Math.round(Math.random() * (max - min)) + min;
return randomNumb;
}
 
function getRandomIntArray(len:Number):Array 
{
var A:Array = [];
var found:Boolean = false;
var un:Number;
 
while (A.length != len) 
{
 un = myRandNumber(1, len);
 found = false;
 for (var i = 0; i < A.length; i++) 
 {
  if (A[i] == un) 
  {
    found = true;
    break;
  }
 }
  if (!found) A.push(un);
}
return A;
}
 
var rand_arr:Array = getRandomIntArray(4); // так применяем
var rand:Number; // переменная для случайного числа
// дальше код аттача, там важно только 2 строчки, остальное для наглядности
for(var i:Number = 1; i <= 2; i++)
{
	rand = rand_arr[i];     /// !!!!!!
	var btn:MovieClip = _root.attachMovie("btn" + rand, "Symbol" + i, _root.getNextHighestDepth()) /// !!!!
// все тчо ниже можно не писать, остальное только для наглядности..
		btn._x = 10 + (btn._width + 5) * (i - 1);
		btn._y = (Stage.width - btn._width) / 2;
 
	var txt = btn.createTextField("my_txt", 1, 0, 0, 50, 20);
		txt.autoSize = true;
		txt.selectable = false;
		txt._x = (btn._width - txt._width) / 2;
		txt._y = (btn._height - txt._height * 2) / 2;
	var my_fmt:TextFormat = new TextFormat();  
		my_fmt.bold = true;
		my_fmt.color = 0x333333;
		my_fmt.font = "Trebuchet MS"
		my_fmt.size = 10;
		txt.text = rand;                           // в текстовое поле загоняем номер
		txt.setTextFormat(my_fmt);              // применяем текстформат
}


Последний раз редактировалось nOobCrafter; 18.03.2009 в 15:52.
Создать новую тему Ответ Часовой пояс GMT +4, время: 20:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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