![]() |
|
||||||||||
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Слегка переписал код чтобы было понятнее.
//// первоначальный массив
var arrayA:Array = new Array (0, 1, 2, 3, 4, 5, 6);
//// это функция которая делает массив случайным, ее не трогаем
function getNewRandom (arrayA:Array):Array {
var arrayB:Array = arrayA.concat ();
var arrayC:Array = new Array ();
for (var i:Number = 0; i < arrayA.length; i++) {
var rnd:Number = Math.floor (Math.random () * arrayB.length);
arrayC.push (arrayB.splice (rnd, 1));
}
return arrayC;
}
//// создаем случайный массив номер 1
var arrayR1:Array = getNewRandom (arrayA);
//// создаем случайный массив номер 2
var arrayR2:Array = getNewRandom (arrayA);
//// создаем случайный массив номер 3
var arrayR3:Array = getNewRandom (arrayA);
//// это просто в качестве примера выводим содержимое этих массивов
trace (arrayR1);
trace (arrayR2);
trace (arrayR3);
|
|
|||||
|
Modus ponens
|
Я использую другой вариант. Принцип где-то похож, но чуть меньше кода
Математику можно немножко более точной сделать, но в принципе и так работает.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Oct 2002
Адрес: Москов сити.
Сообщений: 48
|
Выдает такие ошибки:
Symbol=ðàìêà, Layer=Layer 1, Frame=1: Line 4: '{' expected function getNewRandom (arrayA:Array):Array { Symbol=ðàìêà, Layer=Layer 1, Frame=1: Line 12: Unexpected '}' encountered } |
|
|||||
|
Modus ponens
|
var _arr:Array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
function orderRND():Number{
return Math.floor(Math.random()*2.5-1);
}
_arr.sort(orderRND);
ЗЫ. У этого метода есть определенные недостатки - первый член массива практически всегда остается на первой позиции. Но с другой стороны - операцию нужно делать всего 1 раз, а не каждый раз, когда нужно получить случайный элемент массива. ЗЫ. 2.9999999 будет еще лучше, чем 2.5 ЗЫЫ. ДА, и еще недостаток... такой рандом получается хуже родного флешевского рандома (даже если операцию повторить несколько раз, то значения распространяются недостаточно равномерно.... но если "качество" не принципиально (просто прокрутить серию клипов, например) то и так сойдет, а если нужно "настоящее" рандомальное число, ну или по крайней мере "более" рандомальное (например имитация подбрасывания костей) то лучше так не делать =)
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 06.01.2007 в 21:23. |
|
|||||
|
Регистрация: Oct 2002
Адрес: Москов сити.
Сообщений: 48
|
Складывается ощущение неприятное что я остаюсь в стороне от общего разговора.
Посмотрите исходник пожалуйста. рандом генератор случайных уникальных чисел у меня есть, я приводил его код в первом посте. Но он корректно не работет в моем случае. Вообще вопрос не в том как рандом сделать, а как в моем случае заставить корректно его работать. |
|
|||||
|
Modus ponens
|
Посмотрел исходник.... А есть какая-то реальная необходимость делать это в АС1? Если честно, просто элементарно не нашел место, где находится этот скрипт, который не работает. Просто дико неудобно.
Вариант iNils'a предлагает функцию, которая будет при каждом запуске выдавать один член массива с произвольным индексом и удалять его, после того, как в массиве не останется ничего функция закончит работу. В моем варианте функция просто сортирует массив в произвольном порядке. Т.е. запустив ее 1 раз получим из массива 1,2,3,4,5,6,7,8,9,0 например 2,4,1,6,3,7,0,8,9,5. Ваше дело, как это применять.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
Цитата:
Если del это Array, то что такое arrayA[del]? Я бы так сделал: //исходный массив
var myArr:Array = new Array (0, 1, 2, 3, 4, 5, 6);
// копия
var arr:Array = myArr.concat();
//длинна массива, чтобы не искать ее лишний раз
var num:Number = arr.length;
while ( num > 0 ){
// случайный индекс
var rnd:Number = Math.floor (Math.random () * num );
// выдергиваем элемент с этим индексом из массива
trace (arr.splice( rnd, 1 ) );
// длинна массива уменьшилась
num--;
}
Автор, а повторения кстати неизбежны. Имеем ряд 1,2,3 Первое перемешивание 2,3,1 Второе перемешивание 1,3,2 цифра 1 повторилась - все как в жизни, так бывает. Если вам нужно избежать такой ситуации, надо исключать последний выпавший номер из нашей "лотереи". Последний раз редактировалось Kikasso; 09.01.2007 в 16:04. |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
Ошибка выделена:
Только код надо вынести из того клипа, который вы дублируете, потому что массив у вас создается каждый раз заново. Последний раз редактировалось Kikasso; 09.01.2007 в 16:34. |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:59. |
|
|
« Предыдущая тема | Следующая тема » |
|
|