Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   про скорость hittest() и поиск альтернативы... (http://www.flasher.ru/forum/showthread.php?t=92509)

farmonol 27.02.2007 11:37

про скорость hittest() и поиск альтернативы...
 
Господа, многократно утверждалось и на этом форуме в частности, что hittest медлителен, и для определения столкновений объектов в играх эффективнее применение геометрических алгоритмов.
Однако не все так просто на самом деле...
Предположим требуется определить факт пересечения двух прямоугольников. На вскидку два способа :
1. определить соотношение проекций полудлин сторон прямоугольников
2. определить расстояние между точками фигур по теореме Пифагора.
во втором способе для большинства случаев достаточно типа этого:
Код:

                var test:Boolean=false;
                var dx:Number = _x-obj2._x;
                var dy:Number = _y-obj2._y;
                var dist:Number = Math.sqrt(dx*dx+dy*dy);
                if (dist<obj2._width) test=true;
                return test;

но выясняется что и этот способ на практике работает медленнее чем HITTEST! в цикле на 1000 повторений разница между этим способом и хиттестом составляла 2-3 миллисекунды.
А первый способ (через проекции полудлин) вообще работал медленнее хиттеста при максимальной оптимизации на 8-10 миллисекунд.
Собственно вопрос - как же обогнать хиттест, раз он такой "медленный"?

etc 27.02.2007 12:18

Использовать hitTest у BitmapData.
Обычный hitTest не годится для объектов непрямоугольной формы.

farmonol 27.02.2007 12:47

Цитата:

Сообщение от __etc
Использовать hitTest у BitmapData.
Обычный hitTest не годится для объектов непрямоугольной формы.

нет речь как раз о том, что требуется установить факт столкновения между объектами прямоугольной формы, причем более быстрым способом чем это делает hittest().

Webas 28.02.2007 01:28

http://noregret.org/tutor/index.html там есть на русском...

CCCPirate 28.02.2007 01:37

А хиттест разве медленный? че та не заметил....

silin 28.02.2007 09:53

мне тоже удивительно как скриптовые методы могут быть быстрее 'родных', нигде таких примеров не встречал..
можно говорить о преимуществе каких-то алгоритмов в сравнении с тупым перебором хиттестов в конкретной задаче,
но обогнать хиттест скриптом в равных условиях не выйдет, имхо

Nirth 28.02.2007 13:31

Ну в истории Flash Player были такие случаи =)

Например Питер Халл написал к пятой версии флэш плеера прототип для парсинга XML который работал быстрее встроеного =)

MyXus 02.03.2007 12:44

А я писал MotionTween, тоже был быстрее -)
И удобнее (для меня). До сих про в каждой задаче его юзаю.

silin 02.03.2007 14:05

тут важно уточнить быстрее чем что: твина на линейке? - это было бы интересно глянуть..
если речь о mx.transitions.Tween, то это не встроенный класс, а тот же скрипт..

MyXus 02.03.2007 21:48

Действительно mx.transitions.Tween.

Iv 06.03.2007 02:06

Во-первых, насколько я понял, ты сравниваешь разные вещи: hitTest не определяет не пересеклись ли мувиклипы, а смотрит попала ли точка в пределы прямоугольника (если второй параметр false).
Соответственно, алгоритм нахождения пересечения двух прямоугольников с помощью hitTest становися не таким уж и простым.
(как определить с помощью hitTest пересеклись ли два прямоугольника, если они образовали крест?)

Во-вторых, как я понял, ты делаешь проверку внутри собственного метода. Вызов собственного метода - операция сама по себе накладная: примерно 0.5 ms, если не ошибаюсь.

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

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


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

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