Форум 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.
Старый 15.12.2011, 14:32
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 2  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
А почему у rect1 берется directionX а у rect2- directionY? И при отскоке у одного меняется vx, а у второго - vy? А также чем отличаются speedX и vx?

Старый 15.12.2011, 15:21
Art_133 вне форума Посмотреть профиль Отправить личное сообщение для Art_133 Посетить домашнюю страницу Art_133 Найти все сообщения от Art_133
  № 3  
Ответить с цитированием
Art_133
 
Аватар для Art_133

блогер
Регистрация: Feb 2007
Адрес: Москва
Сообщений: 538
Записей в блоге: 2
Отправить сообщение для Art_133 с помощью Skype™
Я опечатался. В реальном коде сравнивается так:
Код AS3:
rect1.directionX == rect2.directionX
Значение speedX и vx ничем не отличаются.
Я поправил это в посте выше, чтобы не смущало.

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

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

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


 


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


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