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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.03.2012, 03:16
Alex_S вне форума Посмотреть профиль Отправить личное сообщение для Alex_S Найти все сообщения от Alex_S
  № 1  
Ответить с цитированием
Alex_S

Регистрация: Mar 2012
Сообщений: 2
Question Столкновение окружностей

Здравствуйте.
Подскажите или посоветуйте материал (статьи, уроки) где раскрывается тема столкновения юнитов друг с другом в процессе передвижения к одной для всех цели (например, движение толпы монстров на игрока как в Alien Shooter).
Пишу алгоритм поведения врагов для изометрического шутера, и наткнулся на данную проблему. В данный момент для каждого юнита(представлены как окружности), перед обновлением координат, проверяется столкновение со всеми остальными, если после добавления соответствующего значения вектора скорости по Х столкновение состоится, то движение юнита прекращается по оси Х, то же самое для У. Это работает корректно только для 2-3 юнитов, когда их больше, все остальные юниты игнорируют запрет на движение и сливаются воедино.
Как решить данную проблему?
Заранее благодарю.

Старый 22.03.2012, 06:42
stweet вне форума Посмотреть профиль Отправить личное сообщение для stweet Найти все сообщения от stweet
  № 2  
Ответить с цитированием
stweet
 
Аватар для stweet

Регистрация: Mar 2010
Адрес: 54.713862552265084 = 20.442724227905273
Сообщений: 449
Отправить сообщение для stweet с помощью Skype™
Код AS3:
public function myHitTest(enemy:DisplayObject, hero:DisplayObject):Boolean
{
	// вычисляем дистанцию
	var dx:Number = enemy.x - hero.x;
	var dy:Number = enemy.y - hero.y;
 
	// нормализуем дистанцию
	var dis:Number = Math.sqrt(dx * dx + dy * dy);
 
	// указываем минимальную(критичную) дистанцию для столкновения
	// я написал 10 пикселей как пример, используй сумму радиусов окружности.
	var need:Number = 10;
 
	// проверяем дистанцию и возвращаем истину если,
	// дистанция между объектами меньше критичной.
	if (dis < need) return true;
 
	// возвращаем лож если дистанция не прошла проверку.
	return false;
}
Но и это не идеально, есть ещё "оптимизированнее" решение.
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь!

Старый 22.03.2012, 10:59
anmelegov вне форума Посмотреть профиль Отправить личное сообщение для anmelegov Найти все сообщения от anmelegov
  № 3  
Ответить с цитированием
anmelegov
[+4 07.04.12]
[+1 20.01.12]

Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
вы изобретаете велосипед, есть специальный класс Point у которого есть метод distanse()

Старый 22.03.2012, 11:00
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 4  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Вот так.
Код AS3:
if(Point.distance(youPoint, enemyPoint)>=youRadius+enemyRadius{
   trace("hitTest");
}
ЗЫ. не успел, ну да пусть ради примерчика висит.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 22.03.2012, 12:24
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 5  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
А может дистанс медленнее работает?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 22.03.2012, 12:26
stweet вне форума Посмотреть профиль Отправить личное сообщение для stweet Найти все сообщения от stweet
  № 6  
Ответить с цитированием
stweet
 
Аватар для stweet

Регистрация: Mar 2010
Адрес: 54.713862552265084 = 20.442724227905273
Сообщений: 449
Отправить сообщение для stweet с помощью Skype™
Цитата:
Сообщение от anmelegov Посмотреть сообщение
вы изобретаете велосипед, есть специальный класс Point у которого есть метод distanse()
Я не изобретал велосипед, его до меня ой как давно изобрели! =)
В своём примере я просто продемонстрировал как это работает, я же не навязывал или там не"(V)утверждал(V)".

А признаться, я как то "Point - ом" и не пользовался ни разу)))
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь!

Старый 22.03.2012, 12:32
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 7  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
2 + 2 и без Pointa сложить вполне себе можно. И по поводу велосипеда, это к Пифагору

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

Регистрация: Mar 2010
Адрес: 54.713862552265084 = 20.442724227905273
Сообщений: 449
Отправить сообщение для stweet с помощью Skype™
Цитата:
Сообщение от GBee Посмотреть сообщение
А может дистанс медленнее работает?
естественно медленнее. В готовом решении от Adobe - а, все переменные пере создаются, что влечёт за собой постоянный перезапуск чистильщика который в свою очередь гребёт ресурсы под себя.

Мне кажется, если бы разработчики не взирали на (столь "идеально" оптимизированные) решения от Adobe - а, все давно уже на флексе писали бы. =)
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь!

Старый 22.03.2012, 12:41
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 9  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Оперируйте квадратами расстояний.
__________________
Отряд Котовскага

Старый 22.03.2012, 13:07
stweet вне форума Посмотреть профиль Отправить личное сообщение для stweet Найти все сообщения от stweet
  № 10  
Ответить с цитированием
stweet
 
Аватар для stweet

Регистрация: Mar 2010
Адрес: 54.713862552265084 = 20.442724227905273
Сообщений: 449
Отправить сообщение для stweet с помощью Skype™
А и ... TanaTiX внимательнее к своим примерам, в спешке даже в одной строчке допускаете ошибки!
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь!

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

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

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


 


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


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