![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Привет. Пытаюсь понять, как реализовать реакцию на столкновение квадратов (отскок).
Прошу вашей консультации т.к. не всё проходит гладко. Что необходимо сделать, чтобы просчитать траекторию отскока: 1. Определить по какой оси делать отскок (x или y). Нахожу расстояние между 2-мя квадратами по x и по y. Если расстояние по x больше чем по y, значит столкновение по оси x и отскок будет по этой оси. Аналогично с y. Код: 2. Необходимо определить, в какую сторону делать отскок. Если квадраты летят друг другу в лоб - отскок делаем в разные стороны. Если rect1 догоняет rect2 (скорость rect1 > скорости rect2) - отскок осуществляет только rect1 в противоположную сторону, а rect2 как летел так и летит. Код: // если направление квадратов одинаковое 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. |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 497
|
А почему у rect1 берется directionX а у rect2- directionY? И при отскоке у одного меняется vx, а у второго - vy? А также чем отличаются speedX и vx?
|
![]() |
![]() |
Часовой пояс GMT +4, время: 03:11. |
|
|
« Предыдущая тема | Следующая тема » |
|
|