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

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

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

Регистрация: Oct 2002
Адрес: Москов сити.
Сообщений: 48
Question Неповторяющийся рандом.

Друзья, бьюсь уже 3 дня. думал обойтись без помощи форума, да видать по-другому невозможно.
Есть следующая задумка (почти реализованная):
Мувик из N кадров, на каждом кадре стоп, в каждом кадре разные объекты, назовем его БИБЛИОТЕКА.
Мувик в который вставлен БИБЛИОТЕКА (назовем его ВЫБОРКА) и прописано следующее:
--------------------------------------------------------
Код:
onClipEvent (load) {
	var playscene=[1,2,3,4,5,6,7,8,9];
	n=random(playscene.length);
	this.gotoAndStop(n);
	playscene.splice(n,1);
}
--------------------------------------------------------
Идея такая - рандомно выбирается кадр из БИБЛИОТЕКА, и в ВЫБОРКА отображается соответсвенно.
Затем есть еще один мувик, содержащий ВЫБОРКА и код: дубликат симбл.
Итого пытаюсь получить но не получается: чтобы дублированные объекты генерились рандомно, но ни один из них не повторялся. Генерятся рандомно, но иногда бывают повторения.

В экшене я не очень шарю, но понимать вроде могу. Книжка под боком. ПЫтался сделать это (основано на исходнике генерящем неповторябщися рандом из 10 цифр):
--------------------------------------------------------
Код:
onClipEvent (load) {
	Temp = "";
	i = 1;
while (Number(i)<>11) {
	rnd = random(10);
	x = 1;
	while (Number(x)<>Number((Number(length(Temp))+1))) {
		if ((substring(Temp, x, 1)) eq rnd) {
			rnd = "";
		}
		x = Number(x)+1;
	}
	if (rnd ne "") {
		Temp = rnd;
		i = Number(i)+1;
	}
}
	this.gotoAndStop(temp);
}
--------------------------------------------------------
Итог тот=же, повторения наблюдаются.

Может я просто неправильно мыслю. Если есть другой путь, пожалуйста подскажите. Могу выслать исходник, который я вымучиваю из исходника смарт клип.


Последний раз редактировалось iNils; 06.01.2007 в 19:45.
Старый 06.01.2007, 19:46
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
1. Для оформления своего кода, надо использовать теги
2. Надо пользоваться поиском
3. В разделе ActionScript, писать вопросы с синтаксисом onClipEvent и подобным, запрещено. Читайте правила подраздела.
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 06.01.2007 в 19:53.
Старый 06.01.2007, 19:51
poorjorik вне форума Посмотреть профиль Отправить личное сообщение для poorjorik Найти все сообщения от poorjorik
  № 3  
Ответить с цитированием
poorjorik
 
Аватар для poorjorik

Регистрация: Oct 2002
Адрес: Москов сити.
Сообщений: 48
Прошу прощения, но как я уже сказал, экшн скрипт знаю плохо, а просто могу разобраться что написано, пользуясь книгой. Чем заменить on...() я не знаю. Поиском я пользовался. Ничего подходящего найти не удалось.

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Код:
var arrayA:Array = new Array (0, 1, 2, 3, 4, 5, 6);
var arrayB:Array = arrayA.concat()
for (var i:Number = 0; i < arrayA.length; i++) {
	var rnd:Number = Math.floor (Math.random () * arrayB.length);
	var del:Array = arrayB.splice (rnd, 1);
	trace (arrayA[del]);
}
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 09.01.2007, 15:38
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 5  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Цитата:
Сообщение от iNils
Код:
var arrayA:Array = new Array (0, 1, 2, 3, 4, 5, 6);
var arrayB:Array = arrayA.concat()
for (var i:Number = 0; i < arrayA.length; i++) {
	var rnd:Number = Math.floor (Math.random () * arrayB.length);
	var del:Array = arrayB.splice (rnd, 1);
	trace (arrayA[del]);
}
Уважаемый iNils, извините пож. но почему этот код выводит то что хотелось и компилятор не ругается?
Если 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--;
}
PS - только что заметил вторую страницу. Вопрос все равно остался.
Автор, а повторения кстати неизбежны.
Имеем ряд 1,2,3
Первое перемешивание 2,3,1
Второе перемешивание 1,3,2
цифра 1 повторилась - все как в жизни, так бывает.
Если вам нужно избежать такой ситуации, надо исключать последний выпавший номер из нашей "лотереи".


Последний раз редактировалось Kikasso; 09.01.2007 в 16:04.
Старый 06.01.2007, 20:03
poorjorik вне форума Посмотреть профиль Отправить личное сообщение для poorjorik Найти все сообщения от poorjorik
  № 6  
Ответить с цитированием
poorjorik
 
Аватар для poorjorik

Регистрация: Oct 2002
Адрес: Москов сити.
Сообщений: 48
trace (arrayA[del]); простите что делает эта строчка, и какую переменную мне собствеено надо брать чтобы перейти на рандомный кадр?

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

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

Старый 06.01.2007, 20:15
poorjorik вне форума Посмотреть профиль Отправить личное сообщение для poorjorik Найти все сообщения от poorjorik
  № 8  
Ответить с цитированием
poorjorik
 
Аватар для poorjorik

Регистрация: Oct 2002
Адрес: Москов сити.
Сообщений: 48
Код:
var arrayA:Array = new Array (0, 1, 2, 3, 4, 5, 6);
var arrayB:Array = arrayA.concat()
for (var i:Number = 0; i < arrayA.length; i++) {
	var rnd:Number = Math.floor (Math.random () * arrayB.length);
	var del:Array = arrayB.splice (rnd, 1);
	this.gotoAndStop(arrayA[del]);
}
если сделать так то вообще рандом пропадает. и все одинаковые. Объясните как для чайника пожалуйста

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

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

Старый 06.01.2007, 20:27
poorjorik вне форума Посмотреть профиль Отправить личное сообщение для poorjorik Найти все сообщения от poorjorik
  № 10  
Ответить с цитированием
poorjorik
 
Аватар для poorjorik

Регистрация: Oct 2002
Адрес: Москов сити.
Сообщений: 48
в принципе мне это и надо. теперь осталось тольок выяснить arrayA[del] - это и есть это значение? и второе: "при каждом запуске" это как?

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

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

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


 


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


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