0 голосов
 
957 просмотров
24.03.2017 / 05:45  Death

Столкновение объектов

Мне нужно определить находится ли объект1: внутри объекта2, косается его частично, объект2 полностью внутри объекта1.

Нужен один метод что бы возвращал число: 1-косание, 2 - внутри, 3 - снаружи.
25.03.2017 / 08:02  NNRiX
Проще говоря, ты ищешь готовый сниппет?
28.03.2017 / 20:03  Death
А что это такое?
Ответы
 
0 голосов
 
# 24.03.2017 / 06:36  RblSb
Зависит от формы объектов и их свойств. Предположу что в 2D, так что вот достаточно простая статья:
https://developer.mozilla.org/..._collision_detection

Если объекты более сложные, то вот перевод статьи про Separating Axis Theorem:
http://noregret.org/tutor/n/collision/#2

А вот короткий вариант для прямоугольников, возвращающий true/false. У объектов a/b должны быть свойства x,y,w,h для координат, ширины и высоты. Касание мне лично никогда не было нужно, вместо этого всегда выталкивал один объект из другого. Да и с Float это нельзя делать без конвертации в Int, а в данном случае свои нюансы с округлением, так что решай сам, насколько это требуется в игре. Как минимум лучше сделать проверку, насколько пикселей объекты максимально накладываются.

  1. function collision(a, b) {
  2.     return !(
  3.             (a.y + a.h < b.y) ||
  4.             (a.y > b.y + b.h) ||
  5.             (a.x + a.w < b.x) ||
  6.             (a.x > b.x + b.w)
  7.     );
  8. }
24.03.2017 / 07:21  Death
Спасибо. И да, мне в 2д прямоугольные области на столкновение проверять нужно.
Всего: 1

Реклама

Мы в соцсетях

tw tg yt gt