![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 122
|
Вечер добрый,
Необходим генератор случайнх чисел с вероятностью "неповторения". обьясню кратко: есть один клип, новая копия которого, каждые 50 кадров появляются случайно, либо слево от экрана и перемещается через весь экран направо, либо справо и перемещается налево. их y(высота) тоже случайно считается. высота moveclipа около 50 пикселов. при появлении они должны с большой вероятностью (но не точно) появляться в другом месте и не наезжать на предыдущих. но и слево внизу появился, потом справо наверху, потом опять противоположное, слево внизу не должно быть. ну вы поняли, случайно, с небольшой вероятностью к этому ![]() вот что получилось без вероятности: var timeToNew:Number = 50; var didAtDir:int = 0; this.addEventListener(Event.ENTER_FRAME,ClipCreation); function ClipCreation(e:Event):void { if (timeToNew <= GameTimer.currentCount) //GameTimer - таймер считающий кадры { var mc:MovieClip = new MC(); var dodir:int = Math.random() * 5; //попытка чего-то подобного для стороны появления if (didAtDir == 0) { if (dodir==1||dodir==2||dodir==3) { mc.x = -300; var dir = 1; } else { mc.x = 1300; var dir = 0; } } if (didAtDir == 1) // x всегда зависит от стороны { if (dodir==1||dodir==2) { mc.x = -300; var dir = 1; } else { mc.x = 1300; var dir = 0; } } mc.goDir = dir; addChild(mc); timeToNew += 50; var didAtSide:int = dir; } и к слову, таймер реализован вот так. хороший ли это способ, или всетаки для подсчета кадров есть какой-то изобретенный "велосипед", а не просто увеличивающаяся переменная? Последний раз редактировалось alex001; 20.02.2012 в 23:21. |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Записываете с помощью for(...) в массив числа, а потом размешиваете с помощью функции в моей библиотеке:
Теперь у тебя есть массив с перемешанными числами. Бери по одному числу (yourArray[0]), а потом его удаляй (yourArray.splice(0,1)). |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 122
|
Цитата:
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Вы взяли число из массива по индексу [0] (рандомное, массив же перемешан) и удалили его из этого массива. Это гарантирует, что это число уже "не попадется", следующее по тому же индексу [0] будет гарантированно другим. Когда массив закончится, создаете новый. На "стыках" между старым и новым есть ненулевая вероятность совпадения последнего числа из первого массива и первого числа из нового массива. Решается простой проверкой и выкидыванием числа из нового массива, если совпадение есть.
__________________
Reality.getBounds(this); |
|
|||||
var timeToNew:Number = 50; this.addEventListener(Event.ENTER_FRAME,GameTimer); function GameTimer(e:Event):void { GameTimer ++; } Мне сложно себе представить инкремент обработчика события таймера.
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 122
|
нет, вы меня просто не поняли
![]() например мувклип появился наверху экрана. его y = 100. теперь он должен появиться еще раз, с большой вероятностью что он появится внизу с y = 700. если он появился посередине с y = 400, то вероятнсть что н появиться с обоих других концов равна, а то, что посередине мала. если он появился на высоте 1/4 высоты экрана, то соответственно программа вычисляет вероятность дальше. и разумеется числа не круглые, а случайные. а таймер работет отлично, просто такой способ меня почему-то смущает. |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:20. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|