Форум 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)
-   -   Быстрый поиск мувиков под любой точкой (http://www.flasher.ru/forum/showthread.php?t=80034)

Nirth 21.05.2006 01:56

у меня в моем текущем приложении будет 5 классов с одним методом...execute

World Architect 21.05.2006 02:25

ну не везде 3-5... Зато не надо дублировать в др. мувиках... А их м.б. очень много ;) Блин... я вопрос задал :):):)

World Architect 21.05.2006 02:26

Цитата:

Сообщение от Nirth
у меня в моем текущем приложении будет 5 классов с одним методом...execute

не понимаю :) это хорошо или плохо? :)

0xFFFFFF 21.05.2006 02:29

Цитата:

Сообщение от World Architect
Блин... я вопрос задал :):):)

вроде ответили.. перебором..

Nirth 21.05.2006 02:33

это констатация факта, ну это паттерн комманда ( статья по команде с примерами на C# )
Удобно использовать когда одно действие нужно делать разными способами, скажем у меня можно добавить пункт меню, комбинацией ctrl+"+", нажав на соответсвующую кнопку, и через контекстное меню.
ну и все три способа вызывают один и тот же метод класса
Код:

AddItemComman.execute();
такая реализация мне позволяет достаточно быстро реализовать еще один способ добавления пункта(просто написать метод, где вызываеться данная комманда), и если я захочу изменить реализацию, я смогу изменить метод execute в классе-комманде, и не лазать по всем классам которые вызывают ее.

Beta-tester 21.05.2006 10:12

World Architect
А расстояние мужду розетками одинаково?Если да ,то всё легко, а если нет то пока есть небольшие проколы в алгоритме.
Так вот если да:
/*алгоритм на основе одномерного пространства(с двумерным также, только с одномерным более точто можно понять-объяснить)*/
Есть прямая на ней через равные промежутки расставленны опорные точки(твои розетки) и есть вилка(ты знаешь её x)
Вычисляешь к какой розетке ближе всего находится вилка(если все розетки находятся на одинаковом расстоянии: то q= Math.round(вилка._x/расстояние между вилками)
Теперь в q находится порядковый номер ближайшей к нашей вилке розетки.
/*Теперь мы знаем возле какой розетки вилка.Если вилка не попадает в радиус этой розетки, то и не попадет в радиус другой(если ты конечно правильно нарисовал рисунок с расположением элементов)
Теперь осталось вычислить попадает в радиус найденной нами розетки вилка.Переходим к двухмерному пространству.*/
Для этого легче внутри каждой розетки создать невидимый мув представляющий радиус, а потом зная вилка_x и вилка._y используя hittest() определить принадлежит вилка этому радиусу или нет.(это самый как мне кажется лёгкий способ определить принадлежность вилки к радиусу, но возможно не самый быстрый.Но первая часть алгоритма должна работать намноооооого быстрее просто перебора!)
Белая
Я не предлогал просто перебора!Ты не правильно меня поняла.Я предлогал перебор между двумя ближайшими розетками!!!!(но как видишь теперь нашёл более выгодный алгоритм).

neelts 21.05.2006 12:10

используй сетку

Код:

dynamic class HashGrid {
        // размер клетки
        public var grid:Number;
        public function HashGrid(grid:Number) {
                this.grid = grid;
        }
        // добавить мув
        public function add(obj) {
                var p = GetKey(obj._x, obj._y);
                this[p] = this[p] == undefined ? new Object() : this[p];
                this[p][obj._name] = obj;
        }
        // удалить мув
        public function del(obj) {
                delete this[getKey(obj._x, obj._y)][obj._name];
        }
        // если объекты не точечные, то и эту функцию покажу.
        /*public function getQuad(x, y, dx, dy) {
               
        }*/
        // вытащить мувы, находящиеся в клетке под x,y
        public function get(x, y) {
                return this[getKey(x, y)];
        }
        public function getKey(x, y) {
                return Math.floor(x/grid)+"_"+Math.floor(y/grid);
        }
}


World Architect 21.05.2006 21:42

Хм... это мне нравится :) Только тогда мне надо на координатную сетку сразу все объекты в радиусе 5 точек сажать.... Должно ядерно работать :) Спасибо!

World Architect 21.05.2006 21:44

Ну на одну точку массив обектов, которые находятся в радиусе пяти (нужных объектов)

etc 21.05.2006 22:19

neelts, плохой код


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

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