![]() |
Сетка столкновений
Есть объект, который по нажатию мыши стреляет пулями. требуется проверять эту пулю на столкновения с другими объектами, этих объектов слишком много чтобы пользоваться полным перебором. единственный выход это использовать так называемую сетку. получится что проверять придется не все объекты а только те котрые находятся в клетке пули, а точнее в четырех соседних клетках(т.е. рядом с ней). сам алгоритм мне известен, у меня вопрос насчет реализации...
моя идея:создать трехмерный массив(т.е. матрица у каждого элемента которой будет свой массив или объект, в котором мы будем хранить ссылки на объекты, которые принадлежат этой клетке). я застрял на добавлении и удалении объекта в массив или объект. можете объяснить как это делать? и вообще как хранить ссылки на объекты которые принадлежат клетке? или подкиньте другую идею насет реализации. P.S. ссылк на перевод Nox Noctisa не давать. читал, там описано поверхностно. |
Array.push() - добавить к концу,
Array.unshift() - добавить к началу Array.splice(указатель, количество элементов, чем заменить) - заменить\добавить\убрать в произвольном месте. Array.shift() - убрать первый элемент Array.pop() - убрать последний Object.prop = value - любое свойство объекта можно добавить просто так, ну или более замысловато - Object.addProperty("prop",setFunction,getFunction) Чтобы говорить конкретнее - надо видеть хотя бы простой пример того, что нужно сделать... |
Добавлять в массив я уже пробовал, но со временем массив разрастается. короче там не просто так тупо добавлять.
|
чувак, среди программистов ясновидящих мало =)
ясно объясни в чем у тебя траблы. если у тебя 3х мерное пространство, то тебе нужен четырехмерный массив. 3 размерности массива - это оси x,y,z. Четвертая содержит список объектов с которыми ты проверяешь столкновение. это может быть и массив, по которому ты пройдешься в цикле, или , как подсказывает wvxvw (пальчы сломал набирая ник =)) просто экземпляр Object. На самом деле пример обычного хеширования. при желании можно взять и двумерный массив и делать смещение xPos+yPos+zPos или даже одномерный вообще. что ты добавляешь в массив, что он у тебя разрастается? пули? так их нужно удолять после столкновения. |
Вложений: 1
вы совсем из меня дурака сделали) эт понятно что трехмерная(третье измерение-как бы хранилище). а пули я удаляю, но остаются пробелы и со временем массив разрастается, что не есть хорошо. например: есть массив из 20-ти объектов, удаляем 10-ый получится пробел и если так продолжать он разрастется, а это не хорошо. вы наверное предложите цикл фор ин, но он тоже будет замедлятся при разрастании массива и вообще не технично это как то так тупо с массива объекты удалять. вот я и спрашиваю, может кто нибудь знает какие алгоритмы или сталкивался с таким. в аттаче клип, для того чтобы ввести вас в курс дела) в сетку я буду заносить и соотвественно удалять танчики. у каждого клипа свой класс.
|
Ну, а чем скомпилированая флешка должна помочь?
Код:
var _arr:Array = [1,2,3,4,5,6,7,8,9,0]; |
Спасибо. Я просто примерно хотел показать в чем дело. Если надо могу и исходник.
|
Цитата:
|
Код:
grid=new Array;Вот ссылка на исходник: http://www.**************/?1jbl930jlx3 |
Синтаксические ошибки:
grid.length=_global.width/50 Вообще не понятно, что имеется в виду... наверное, создать массив с зарезервированными Н позициями? grid[i]=new Array Не хватает круглых скобок после Array. Создать двумерный массив: Код:
ar twoD_arr:Array = new Array(10); // 10 is the lenght of the newly created array. |
| Часовой пояс GMT +4, время: 09:20. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.