![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 2
|
проблемма: загрузка нескольких случайных клипов на сцену из массива так, чтобы они не повторялись.
На форуме нашел несколько сообщении на эту тему. Мне не удалось привязать их к моему примеру. Или не работало или было черезчур сложно. Хорошо бы остаться в рамках 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}); } /myArray2 = myArray.splice("mc"+r,1);/ или не работает или работает не верно(удаляет не тот клип) В реальности клипов будет 50, из них 30 случаиных должны появится на сцене, но не повторятся. Кто поможет? Последний раз редактировалось iNils; 18.03.2009 в 13:11. |
|
|||||
|
Ну за детсад.. Я ж тебе отписал уже:
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" рондомешь его в указанных рамках:
Цитата:
Потом опять генеришь случайное число от 0 до Array.length() — количество элементов в массиве, грузишь клип, удаляешь... и так пока не выгрузишь все. Тебе надо: http://www.flasher.ru/forum/showthread.php?t=93300 там класс Мath и Array |
|
|||||
|
_SAM_ извиняюсь, но чем предложенный тобой способ отличается от моего? Если хочется диапазон не с 1, а от N то неужто трудно добавить аргумент типа
Просто данный вариант заточен именно под галереи где счет идет с 1 \ 0... |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 2
|
nOobCrafter
На счет детсада - верно. Мне как раз под 60. Скоро снова в дет сад пора.... По сути... Возможно и даже уверен твой скрипт очень хорош. Пробую с ним чего то делать. Ничего не получается ( у меня Flash MX). Просьба простая: конкретный работающии скрипт: 4 mc, 2 случайных из них грузятся на сцену в определенные точки причем не повторяясь( см.выше) _SAM_ По этому пути я и шел. Создал массив. Случаиный член атачится на сцену, затем создаю массив2 за вычетом использованного члена первоначального массива и рандомно опять attach. Однако здесь /myArray2 = myArray.splice("mc"+r,1);/что то не верно. Что? А вообще, всем спасибо |
|
|||||
|
итак, в библиотеке имеем 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); // применяем текстформат } Последний раз редактировалось nOobCrafter; 18.03.2009 в 15:52. |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:37. |
|
|
« Предыдущая тема | Следующая тема » |
|
|