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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 15.12.2011, 13:52
Art_133 вне форума Посмотреть профиль Отправить личное сообщение для Art_133 Посетить домашнюю страницу Art_133 Найти все сообщения от Art_133
  № 1  
Ответить с цитированием
Art_133
 
Аватар для Art_133

блогер
Регистрация: Feb 2007
Адрес: Москва
Сообщений: 538
Записей в блоге: 2
Отправить сообщение для Art_133 с помощью Skype™
По умолчанию Реакция на столкновение квадратов. Помогите доработать код.

Привет. Пытаюсь понять, как реализовать реакцию на столкновение квадратов (отскок).
Прошу вашей консультации т.к. не всё проходит гладко.
Что необходимо сделать, чтобы просчитать траекторию отскока:
1. Определить по какой оси делать отскок (x или y).
Нахожу расстояние между 2-мя квадратами по x и по y. Если расстояние по x больше чем по y, значит столкновение по оси x и отскок будет по этой оси. Аналогично с y.
Код:
Код AS3:
var dx:Number = Math.abs(rect1.x - rect2.x);
var dy:Number = Math.abs(rect1.y - rect2 .y);
2. Необходимо определить, в какую сторону делать отскок. Если квадраты летят друг другу в лоб - отскок делаем в разные стороны.
Если rect1 догоняет rect2 (скорость rect1 > скорости rect2) - отскок осуществляет только rect1 в противоположную сторону, а rect2 как летел так и летит.
Код:
Код AS3:
// если направление квадратов одинаковое
if(rect1.directionX == rect2.directionX)
{
	// Скорость квадрата, который доганяет - больше, 
	// значит отскакивать будет он
	if(rect1.vx > rect2.vx )
	{
		rect1.vx *= -1;
	}
	else
	{
		rect1.vy *= -1;
	}
}
// если направление квадратов разное (летят в лоб друг другу)
// отскок в разные стороны
else if(rect1.directionX != rect2.directionX)
{
	rect1.vx *= -1;
	rect1.vy *= -1;		
}
В результат получилось вот это Мы видим, что иногда квадраты прилипают друг другу.
Ощущение кривизны кода портит настроение. Подскажите, пожалуйста, где я не прав и как это исправить?
Хочется понять принцип.
За ранее спасибо.


Последний раз редактировалось Art_133; 15.12.2011 в 15:22.
Создать новую тему   Часовой пояс GMT +4, время: 07:03.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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