Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Реакция на столкновение квадратов. Помогите доработать код. (http://www.flasher.ru/forum/showthread.php?t=172694)

Art_133 15.12.2011 13:52

Реакция на столкновение квадратов. Помогите доработать код.
 
Привет. Пытаюсь понять, как реализовать реакцию на столкновение квадратов (отскок).
Прошу вашей консультации т.к. не всё проходит гладко.
Что необходимо сделать, чтобы просчитать траекторию отскока:
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;               
}

В результат получилось вот это Мы видим, что иногда квадраты прилипают друг другу.
Ощущение кривизны кода портит настроение. Подскажите, пожалуйста, где я не прав и как это исправить?
Хочется понять принцип.
За ранее спасибо.

maxkar 15.12.2011 14:32

А почему у rect1 берется directionX а у rect2- directionY? И при отскоке у одного меняется vx, а у второго - vy? А также чем отличаются speedX и vx?

Art_133 15.12.2011 15:21

Я опечатался. В реальном коде сравнивается так:
Код AS3:

rect1.directionX == rect2.directionX

Значение speedX и vx ничем не отличаются.
Я поправил это в посте выше, чтобы не смущало.


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

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