Просмотр полной версии : загрузка случайных клипов без повтора
проблемма: загрузка нескольких случайных клипов на сцену из массива так, чтобы они не повторялись.
На форуме нашел несколько сообщении на эту тему. Мне не удалось привязать их к моему примеру. Или не работало или было черезчур сложно. Хорошо бы остаться в рамках Flash MX
Пробую следующее
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 случаиных должны появится на сцене, но не повторятся.
Кто поможет?
nOobCrafter
18.03.2009, 11:35
Ну за детсад.. Я ж тебе отписал уже:
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)
}
Создаешь массив, Берешь за индекс массива "i" рондомешь его в указанных рамках:
Пример
В следующем примере возвращается случайное число в указанном диапазоне.
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
niks77, для оформления своего кода, надо использовать теги .
nOobCrafter
18.03.2009, 14:09
_SAM_ извиняюсь, но чем предложенный тобой способ отличается от моего? Если хочется диапазон не с 1, а от N то неужто трудно добавить аргумент типа
function getRandomIntArray(N:Number, len:Number):Array
.......
un = myRandNumber(N, len);
....
Просто данный вариант заточен именно под галереи где счет идет с 1 \ 0...
nOobCrafter
На счет детсада - верно. Мне как раз под 60. Скоро снова в дет сад пора....
По сути... Возможно и даже уверен твой скрипт очень хорош. Пробую с ним чего то делать. Ничего не получается ( у меня Flash MX).
Просьба простая: конкретный работающии скрипт: 4 mc, 2 случайных из них грузятся на сцену в определенные точки причем не повторяясь( см.выше)
_SAM_
По этому пути я и шел. Создал массив. Случаиный член атачится на сцену, затем создаю массив2 за вычетом использованного члена первоначального массива и рандомно опять attach. Однако здесь /myArray2 = myArray.splice("mc"+r,1);/что то не верно. Что?
А вообще, всем спасибо
nOobCrafter
18.03.2009, 15:29
итак, в библиотеке имеем 4 мувика с линкейдж именами btn1, btn2, btn3, btn4...
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); // применяем текстформат
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.