![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 27
|
рисую круг делаю из него мувиклип с именем mc, засовываю в него круг (мувиклип)с меньшим радиусом с именем head. надо чтоб мувиклип ball(круг) сталкивался с mc.head.
var Radiusball:Number = ball.width/2;//радиус ball var Radiusmc:Number = mc.head.width/2;//Радиус head var distance:Number = Math.sqrt(Math.pow(mc.head.x - ball.x,2) + Math.pow(mc.head.y - ball.y, 2));//расстояние между объектами addEventListener(Event.ENTER_FRAME, go) function go(e:Event):void { ball.y +=10; if (Radiusmc+Radiusball >= distance) { trace("all right"); } } решил сделать не через hitTestObject. вопрос вообще отличие будет видно в анимации между hitTestObject и таким методом? |
|
|||||
|
Как-то так.
private var radiusCollision:int = 15; ... private function go(e:Event):void { var dx:Number = ball.x - mc.head.x - mc.x; var dy:Number = ball.y - mc.head.y - mc.y; if (Math.sqrt(dx*dx + dy*dy) > radiusCollision) ball.y += 10; else trace("collision!"); } Цитата:
__________________
тут я Последний раз редактировалось КорДум; 30.01.2011 в 15:57. |
|
|||||
|
Lorem ipsum
|
Сначала немного общих рекомендаций:
1. не используй pow для возведения в квадрат — только умножение 2. не вычисляй каждый раз корень — посчитай в самом начале сумму Radiusmc+Radiusball уже в квадрате Что до твоего примера, то ball и mc имеют глобальные координаты (поэтому все работает), а head имеет координаты в контексте мувика mc, т.е. не глобальные. Можешь использовать localToGlobal, а можешь просто суммировать координаты mc и head.
__________________
Поймай яблоко 2! Последний раз редактировалось Zebestov; 30.01.2011 в 15:58. |
|
|||||
|
Цитата:
![]()
__________________
тут я |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 27
|
спасибо все понял. hitTestObject требует больше ресурсов, т.е. лучше его обходить если возможно? или это не значительно?
|
|
|||||
|
Lorem ipsum
|
Если я себе правильно представляю работу hitTestObject, то он берет пересечение bounding box обоих мувиков и потом проходит по растрам этого результирующего прямоугольника в обоих изображениях до первого alpha1&&alpha2==true. При таком раскладе как ни крути — это просто ППЦ во сколько раз дольше твоей проверки.
Если же я ошибаюсь на предмет работы hitTestObject — вычеркните из памяти весь бред, что я написал выше ) P.S. но в любом случае — hitTestObject дольше ![]()
__________________
Поймай яблоко 2! |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
__________________
Reality.getBounds(this); |
|
|||||
|
Lorem ipsum
|
Wolsh, очень компактно, но опять же — каждый раз корень считать.
__________________
Поймай яблоко 2! |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Да, с distance аж в 10 раз медленней, чем код, приведенный КорДумом. (143 vs 15)
Добавлено через 11 минут А если корень вообще не вычислять, т.е. сравнивать заранее посчитанный квадрат radiusCollision с (dx*dx + dy*dy), то скорость выше еще в 1.5-2 раза.
__________________
Reality.getBounds(this); |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:02. |
|
|
« Предыдущая тема | Следующая тема » |
|
|