![]() |
Неповторяющийся рандом.
Друзья, бьюсь уже 3 дня. думал обойтись без помощи форума, да видать по-другому невозможно.
Есть следующая задумка (почти реализованная): Мувик из N кадров, на каждом кадре стоп, в каждом кадре разные объекты, назовем его БИБЛИОТЕКА. Мувик в который вставлен БИБЛИОТЕКА (назовем его ВЫБОРКА) и прописано следующее: -------------------------------------------------------- Код:
onClipEvent (load) {Идея такая - рандомно выбирается кадр из БИБЛИОТЕКА, и в ВЫБОРКА отображается соответсвенно. Затем есть еще один мувик, содержащий ВЫБОРКА и код: дубликат симбл. Итого пытаюсь получить но не получается: чтобы дублированные объекты генерились рандомно, но ни один из них не повторялся. Генерятся рандомно, но иногда бывают повторения. В экшене я не очень шарю, но понимать вроде могу. Книжка под боком. ПЫтался сделать это (основано на исходнике генерящем неповторябщися рандом из 10 цифр): -------------------------------------------------------- Код:
onClipEvent (load) {Итог тот=же, повторения наблюдаются. Может я просто неправильно мыслю. Если есть другой путь, пожалуйста подскажите. Могу выслать исходник, который я вымучиваю из исходника смарт клип. |
1. Для оформления своего кода, надо использовать теги
2. Надо пользоваться поиском 3. В разделе ActionScript, писать вопросы с синтаксисом onClipEvent и подобным, запрещено. Читайте правила подраздела. |
Прошу прощения, но как я уже сказал, экшн скрипт знаю плохо, а просто могу разобраться что написано, пользуясь книгой. Чем заменить on...() я не знаю. Поиском я пользовался. Ничего подходящего найти не удалось.
|
Код:
var arrayA:Array = new Array (0, 1, 2, 3, 4, 5, 6); |
trace (arrayA[del]); простите что делает эта строчка, и какую переменную мне собствеено надо брать чтобы перейти на рандомный кадр?
|
Выдает в трасе-окно случайный результат из массива.
|
Код:
var arrayA:Array = new Array (0, 1, 2, 3, 4, 5, 6); |
Честно говоря я не понял чего вы хотите и дал вам код которые генерит последовательно случайное и уникальное (в каждом запуске) значение из массива возможных значений.
|
в принципе мне это и надо. теперь осталось тольок выяснить arrayA[del] - это и есть это значение? и второе: "при каждом запуске" это как?
|
Вложений: 1
вот посмотрите пожалуйста что мне нужно (работает некоректно, есть повторения)
|
Слегка переписал код чтобы было понятнее.
Код:
//// первоначальный массив |
Я использую другой вариант. Принцип где-то похож, но чуть меньше кода
Код:
var _arr:Array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]; |
Цитата:
|
Выдает такие ошибки:
Symbol=ðàìêà, Layer=Layer 1, Frame=1: Line 4: '{' expected function getNewRandom (arrayA:Array):Array { Symbol=ðàìêà, Layer=Layer 1, Frame=1: Line 12: Unexpected '}' encountered } |
Код:
var _arr:Array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];ЗЫ. У этого метода есть определенные недостатки - первый член массива практически всегда остается на первой позиции. Но с другой стороны - операцию нужно делать всего 1 раз, а не каждый раз, когда нужно получить случайный элемент массива. ЗЫ. 2.9999999 будет еще лучше, чем 2.5 ЗЫЫ. ДА, и еще недостаток... такой рандом получается хуже родного флешевского рандома (даже если операцию повторить несколько раз, то значения распространяются недостаточно равномерно.... но если "качество" не принципиально (просто прокрутить серию клипов, например) то и так сойдет, а если нужно "настоящее" рандомальное число, ну или по крайней мере "более" рандомальное (например имитация подбрасывания костей) то лучше так не делать =) |
Складывается ощущение неприятное что я остаюсь в стороне от общего разговора.
Посмотрите исходник пожалуйста. рандом генератор случайных уникальных чисел у меня есть, я приводил его код в первом посте. Но он корректно не работет в моем случае. Вообще вопрос не в том как рандом сделать, а как в моем случае заставить корректно его работать. |
Посмотрел исходник.... А есть какая-то реальная необходимость делать это в АС1? Если честно, просто элементарно не нашел место, где находится этот скрипт, который не работает. Просто дико неудобно.
Вариант iNils'a предлагает функцию, которая будет при каждом запуске выдавать один член массива с произвольным индексом и удалять его, после того, как в массиве не останется ничего функция закончит работу. В моем варианте функция просто сортирует массив в произвольном порядке. Т.е. запустив ее 1 раз получим из массива 1,2,3,4,5,6,7,8,9,0 например 2,4,1,6,3,7,0,8,9,5. Ваше дело, как это применять. |
Цитата:
Если del это Array, то что такое arrayA[del]? Я бы так сделал: Код:
//исходный массивАвтор, а повторения кстати неизбежны. Имеем ряд 1,2,3 Первое перемешивание 2,3,1 Второе перемешивание 1,3,2 цифра 1 повторилась - все как в жизни, так бывает. Если вам нужно избежать такой ситуации, надо исключать последний выпавший номер из нашей "лотереи". |
Ошибка выделена:
Код:
var playscene=[1,2,3,4,5,6,7,8,9]; |
| Часовой пояс GMT +4, время: 07:34. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.