PDA

Просмотр полной версии : Использование метода Math.random() относительно объекта


КорДум
03.02.2008, 11:09
здравствуйте, у меня возник вопрос - возможно ли сделать так, чтоб clip1 размещался на clip2 в произвольном порядке, но никогда не выходил за пределы clip2 с помощью метода Math.random()?
Clip2 произвольной формы. Помогите пожалуйста

MrPoma
03.02.2008, 12:18
clip1._x = Math.round(clip2._width * Math.random());
clip1._y = Math.round(clip2._height * Math.random());

КорДум
03.02.2008, 14:15
clip1._x = Math.round(clip2._width * Math.random());
clip1._y = Math.round(clip2._height * Math.random());

данный метод хорош только тогда, когда регистрационная точка clip2 находится в верхнем левом углу клипа, а сам clip2 находится в левом верхнем углу сцены...

DarkLight
03.02.2008, 14:46
Так что мешает доработать до нужного? смотрим размеры и расположение области, где позиция 1ого клипа допустима, добавляем поправку на положение clip2, и делаем поправку на точку регистрации клипов, хотя я бы рекомендовал использовать левый верхний угол везде - меньше проблем будет.

КорДум
03.02.2008, 14:52
можно с примером? при условии, что clip2 находится и в отрицательной области, и в положительной...

DarkLight
03.02.2008, 15:13
//Позиции точек регистрации клипов вводим вручную
//т е выделяем все содержимое и смотрим на панели свойств X и Y
var clip1centerX:Number = -24;
var clip2centerX:Number = -20;
var clip1centerY:Number = -20;
var clip2centerY:Number = -41;
//Подразумевается, что clip2 больше clip1
var deltaWidth:Number = clip2._width-clip1._width;
var deltaHeight:Number = clip2._height-clip1._height;
//
clip1._x = clip2._x+Math.random()*deltaWidth-clip1centerX+clip2centerX;
clip1._y = clip2._y+Math.random()*deltaHeight-clip1centerY+clip2centerY;

Пример:18815

КорДум
03.02.2008, 20:33
DarkLight, большое спасибо за помощь...

Arreke
29.02.2008, 12:59
метод Math.random() генерирует случ. числа от 0.0 до 1.0
А как сделать чтобы генерировал простые числа от 1 до 11, как например в Delphi random(11) ?

chingachgoog
29.02.2008, 13:06
метод Math.random() генерирует случ. числа от 0.0 до 1.0
А как сделать чтобы генерировал простые числа от 1 до 11, как например в Delphi random(11) ?

Так и написать, как в Дельфи - trace(random(мое_число))
вернет значение целого числа от 0 до мое_число-1

iNils
29.02.2008, 13:09
chingachgoog, сейчас по рукам получит за обучение старым методам.
надо делать так
Math.ceil (Math.random () * 11)

chingachgoog
29.02.2008, 13:16
А кто сказал, что deprecated методы не надо знать? Тем более если они к тому же и ГОРАЗДО быстрее работают, как в случае с random?

add:
к тому же код несравненно короче:

trace(random(11))
// дает в байткоде такую картину:

push 11
random
trace

а вот

trace(Math.ceil (Math.random () * 11))
// дает нечто :

constants 'Math', 'random', 'ceil'
push 0.0, 'Math'
getVariable
push 'random'
callMethod
push 11
multiply
push 1, 'Math'
getVariable
push 'ceil'
callMethod
trace

Вот и вопрос теперь кому по рукам бить... :)

iNils
29.02.2008, 13:21
Их можно знать, но как альтернативу, подчеркивая, что эти методы не рекомендуются к употребления. В противном случаи вы оказываете медвежью услугу.

chingachgoog
29.02.2008, 13:27
Согласен, надо помечать, что это deprecated.

Arreke
29.02.2008, 15:56
надо делать так
Math.ceil (Math.random () * 11)

СПС, Respect.

Arreke
01.03.2008, 00:39
А они кстати по разному работают,
1) random(11) - числа от 0 до 10
2) Math.ceil (Math.random () * 11) - числа от 1 до 11

Как сделать чтобы 2-ой тоже как 1-ый делал?

etc
01.03.2008, 00:45
Как сделать чтобы 2-ой тоже как 1-ый делал?
Напрячь мозг.

iNils
01.03.2008, 00:49
Сами же просили от 1 до 11
Math.floor (Math.random () * 11)