Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.05.2012, 18:34
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 11  
Ответить с цитированием
Frost47rus
[+4 08.09.13]

Регистрация: May 2012
Сообщений: 131
При проверке каждого с каждым - займёт 9.900 проверок.

Положим, разобьём всю сцену на 10 секторов.
По 10 объектов в каждом.
Итого, каждый объект пройдёт в среднем по 9 проверок = 990 проверок. Вроде бы WIN и PROFIT.
Но, как быть с теми вариантами, когда объект находится сразу в 4 областях?
Ок. Берём квадрат(прямоугольник). углы - границы.
Добавляем к каждому проверку его границ к секторам. Ещё +4 проверки к каждому мувику.
итого порядка 1500 проверок.
вроде бы WIN и PROFIT.
но каким тогда образом прогонять сам факт столкновения между объектами? запара.

и если движение рандом - то получится, что будут возникать случаи, когда 1 сектор вместит в себя большое количество объектов, стремящееся к 100. И тогда разницы между обычным способом и навороченным с секторами - практически не будет. и вместо (если они будут) лагов постоянно - получим "рандомные" лаги. что для большиства ещё хуже чем перманентные.

мой вывод: вопрос сложный.


Последний раз редактировалось Frost47rus; 14.05.2012 в 18:35. Причина: лаги
Старый 25.05.2012, 09:16
Tetraeon вне форума Посмотреть профиль Отправить личное сообщение для Tetraeon Найти все сообщения от Tetraeon
  № 12  
Ответить с цитированием
Tetraeon

Регистрация: May 2012
Сообщений: 166
Пробую проверить столкновение экземпляров 1го класса... никак не получается правильно обратиться к ним..
Код AS3:
if ((Point.distance(enemyPoint,enemyPoint)<10) && (Point.distance(enemyPoint,enemyPoint)>1))
{
  trace('1');
}
Из кода видно что точка экземпляра проверяет приближение сама с собой, но на определенном промежутке, точка ссылается на не статическую переменную... хотя я и так и так пробовал.
Как думаете реально из этого что то сделать?

Старый 25.05.2012, 11:43
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 13  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Если хочется сложно и с наворотами... можно почитать про цепочки Маркова: http://ru.wikipedia.org/wiki/%D0%A6%...BE%D0%B2%D0%B0 с их помощью можно описать перемещение объектов, а так же использовать для поиска того, что в последнее время переместилось, соседей с которыми потенциально могли столкнуться объекты и т.п.

Есть еще такой вариант: построить структуру данных типа дерева, только с той разницей, что у узла может быть более одного родителя, и узлы знают про своих родителей. В таком случае для обычной сетки построенной из прямоугольников степень ветвления будет равной 4. Найти всех бизжайших соседей - за 1 * 4 + 2 * 4 операций. Соответственно, каждый узел хранит список объектов, которые в данный момент находятся в его координатах.
Отдельно от этой структуры хранить хеш-таблицу, в которой записывать в каких узлах произошли изменения. Таким образом вы минимизируете задачу проверок до сравнения только тех узлов в которых произошли изменения * 8.

Да, но скорее всего лучше использовать сетку из треугольников или шестиугольников. Получится немного сложнее проверять где именно находится объект (например, суммируя все углы между соседними вершинами многоугольника и объектом), но зато меньше соседей - 6 против 8.

Ну и соответственно, такое решение будет тем лучше работать, чем более однородные объекты. Объекты не должны быть больше ячеек сетки.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 25.05.2012 в 12:10.
Старый 04.06.2012, 18:35
Tetraeon вне форума Посмотреть профиль Отправить личное сообщение для Tetraeon Найти все сообщения от Tetraeon
  № 14  
Ответить с цитированием
Tetraeon

Регистрация: May 2012
Сообщений: 166
Как думаете насчет такого варианта: создать поле вокруг MovieClip и объект внутри этого поля не касающийся его и при столкновении с краями другого поля будит засчитываться столкновение? Вопрос как сделать такое поле...

Старый 04.06.2012, 19:23
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 15  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
математически описываете и вперед =)

Старый 04.06.2012, 19:42
Tetraeon вне форума Посмотреть профиль Отправить личное сообщение для Tetraeon Найти все сообщения от Tetraeon
  № 16  
Ответить с цитированием
Tetraeon

Регистрация: May 2012
Сообщений: 166
Если бы я мог применить программно все это добро к своим экземплярам Класса я бы уже использовал вариант с расстоянием между точками(выше), а так только на визуальный вариант надежда.

Старый 27.06.2012, 20:35
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 17  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
Подскажите, пожалуйста, как реализовать такую вещь:
Есть танк, и его контур представлен несколькими накладывающимися прямоугольниками. В танк был выпущен с снаряд с очень большой скоростью. Нужно отследить попадание снаряда по контуру танка и просчитать отскок(рикошет) снаряда от контура. Подскажите в какую сторону копать?
Вот некоторые непонятные мне моменты:
1.Снаряд остановился внутри сразу двух чекбоксов. Мы понимаем, что столкновение произошло с гусеницей, а не с корпусом, но как это програмно отличить?
2. Между последним и текущим кадром снаряд прошил танк насквозь. Мы знаем, что столкновение было и было с гусеницей, но как это проверить?
3. Думаю рикошет будет легко вычислить если решить предыдущие проблемы, но для полноты картины оставлю.
Изображения
 

Старый 28.06.2012, 10:59
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 18  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
PlutDem, поищите на тему определения столкновения быстродвижущихся объектов.

http://animbook.mirmap.com/content/view/32/43/

Смотрите "Обнаружение столкновений с применением математики".

Как вариант — можно проверять столкновения несколько раз за одну итерацию. То есть если длина вектора движения в 5 раз больше размерности танка, при перемещении снаряда в новое положение в цикле двигайте снаряд на 1/5-ую его скорости и тут же проверяйте.

Как другой вариант — использовать две битмапдаты. Одна с отрисованым залитым контуром танка. Вторая с траекторией пули. Накладывая битмапдаты одну на другую с некоторым blendMode`ом (сейчас не скажу точно с каким) можно получить отличный от танка и траектории цвет на битмапдате, который как раз проявится в месте пересечения танка и траектории. Потом уже не составит труда получить Rectangle области пересечения (области определенного цвета) и, зная, с какой стороны выпущен снаряд, расчитать первую точку соприкосновения.

Нажмите на изображение для увеличения
Название: tanks.PNG
Просмотров: 116
Размер:	22.3 Кб
ID:	28148
__________________
hauts.ru


Последний раз редактировалось Hauts; 28.06.2012 в 11:15.
Старый 28.06.2012, 12:53
kiloT вне форума Посмотреть профиль Отправить личное сообщение для kiloT Найти все сообщения от kiloT
  № 19  
Ответить с цитированием
kiloT

Регистрация: Aug 2010
Сообщений: 14
На хабре была статья http://habrahabr.ru/post/135948/. Там есть несколько алгоритмов для решения вашей задачи. И еще несколько полезных статей для определения столкновений:
http://noregret.org/tutor/n/grid/
http://www.playchilla.com/as3-spatial-hash - готовое решение

Старый 30.06.2012, 22:32
Den_root вне форума Посмотреть профиль Отправить личное сообщение для Den_root Найти все сообщения от Den_root
  № 20  
Ответить с цитированием
Den_root

Регистрация: Feb 2012
Сообщений: 36
Я вот тут почитал про ТРО и никак не пойму как найти проекцию прямоугольника на ось. Подскажити, пожалуйста, как ее вычислить?

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:40.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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