Просмотр полной версии : Использование метода Math.random() относительно объекта
здравствуйте, у меня возник вопрос - возможно ли сделать так, чтоб clip1 размещался на clip2 в произвольном порядке, но никогда не выходил за пределы clip2 с помощью метода Math.random()?
Clip2 произвольной формы. Помогите пожалуйста
clip1._x = Math.round(clip2._width * Math.random());
clip1._y = Math.round(clip2._height * Math.random());
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, и делаем поправку на точку регистрации клипов, хотя я бы рекомендовал использовать левый верхний угол везде - меньше проблем будет.
можно с примером? при условии, что 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
DarkLight, большое спасибо за помощь...
метод 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
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
Вот и вопрос теперь кому по рукам бить... :)
Их можно знать, но как альтернативу, подчеркивая, что эти методы не рекомендуются к употребления. В противном случаи вы оказываете медвежью услугу.
chingachgoog
29.02.2008, 13:27
Согласен, надо помечать, что это deprecated.
надо делать так
Math.ceil (Math.random () * 11)
СПС, Respect.
А они кстати по разному работают,
1) random(11) - числа от 0 до 10
2) Math.ceil (Math.random () * 11) - числа от 1 до 11
Как сделать чтобы 2-ой тоже как 1-ый делал?
Как сделать чтобы 2-ой тоже как 1-ый делал?
Напрячь мозг.
Сами же просили от 1 до 11
Math.floor (Math.random () * 11)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.