Я новый в этом поле, и у меня есть вопрос -
У меня есть изображение и объект. Назовем объект, "ball".
Мяч движется, и в какой-то момент он достигает изображения. И вот моя проблема -
Как я могу обнаружить, что мяч коснулся изображения?
Заранее спасибо.Обнаруживающий объект, достигающий изображения
ответ
Вы должны моделировать свои объекты каким-либо способом математики - например, как замкнутые полигоны. Затем вы можете искать алгоритм пересечения двух полигонов.
Если вы работаете с 2D, вы можете просто использовать простое обнаружение столкновений Rectanlge. В основном, чтобы проверить, находится ли прямоугольник в столкновении с другим прямоугольником, вы должны проверить его положение X и Y с его шириной и высотой.
Ниже у меня есть jsfiddle пример с использованием html5 тег Canvas
jsfiddle: https://jsfiddle.net/e2dmef7q/
код, который проверяет наличие столкновений
function Mathematics()
{
}
Mathematics.prototype.PointInRect = function(pnt_x, pnt_y, rect_x, rect_y, rect_w, rect_h)
{
if ((pnt_x >= rect_x) && (pnt_x <= rect_x + rect_w - 1))
{
if ((pnt_y >= rect_y) && (pnt_y <= rect_y + rect_h - 1))
{return true;}
}
return false;
}
Mathematics.prototype.RectToRectCollision = function(rect1_x, rect1_y, rect1_w, rect1_h,
rect2_x, rect2_y, rect2_w, rect2_h)
{
// top-left corner
if (this.PointInRect(rect1_x, rect1_y, rect2_x, rect2_y, rect2_w, rect2_h)){return true;}
// top-right corner
if (this.PointInRect(rect1_x + rect1_w - 1, rect1_y, rect2_x, rect2_y, rect2_w, rect2_h)){return true;}
// bottom-right corner
if (this.PointInRect(rect1_x + rect1_w - 1, rect1_y + rect1_h - 1, rect2_x, rect2_y, rect2_w, rect2_h)){return true;}
// bottom-left corner
if (this.PointInRect(rect1_x, rect1_y + rect1_h - 1, rect2_x, rect2_y, rect2_w, rect2_h)){return true;}
// Check to see if rectangle 2 is hit any part of rectanlge 1
// top-left corner
if (this.PointInRect(rect2_x, rect2_y, rect1_x, rect1_y, rect1_w, rect1_h)){return true;}
// top-right corner
if (this.PointInRect(rect2_x + rect2_w - 1, rect2_y, rect1_x, rect1_y, rect1_w, rect1_h)){return true;}
// bottom-right corner
if (this.PointInRect(rect2_x + rect2_w - 1, rect2_y + rect2_h - 1, rect1_x, rect1_y, rect1_w, rect1_h)){return true;}
// bottom-left corner
if (this.PointInRect(rect2_x, rect2_y + rect2_h - 1, rect1_x, rect1_y, rect1_w, rect1_h)){return true;}
// If there is no collision
return false;
}
Просто быстренько RectToRectCollision берет х , y, ширина и высота двух прямоугольников. Затем он использует функцию PointInRect, чтобы проверить, находится ли точка прямоугольника внутри другого прямоугольника.
P.S. мой код, который я предоставил, из старого примера, который у меня есть, и может показаться немного пугающим. Но сайт Mozilla содержит некоторую приятную информацию о 2D-столкновении https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection
- 1. Divs, достигающий стороны страницы
- 2. Кватернион, достигающий карданного замка
- 3. Repeater Control, обнаруживающий объект, который вызывает событие
- 4. Объем, достигающий верхних массивов
- 5. MouseClicks, достигающий заднего окна WPF
- 6. , достигающий дневного лимита Gmail SMTP
- 7. CSS Стиль, не достигающий границ
- 8. Метеор, обнаруживающий существование поля в коллекции
- 9. Спящий режим, обнаруживающий, что объект является переходным с одновременной устойчивостью
- 10. android, обнаруживающий перетаскивание
- 11. Супервизор, не обнаруживающий файл
- 12. Hashtable, обнаруживающий нагрузку
- 13. Обнаруживающий номер ввода прядильщика
- 14. presentModalViewController, обнаруживающий завершение анимации
- 15. PHP, достигающий предела памяти, вызывает повторную функцию
- 16. Lazy Deferred List, достигающий максимальной глубины рекурсии
- 17. PHP, обнаруживающий перенаправление на себя
- 18. Обнаруживающий элемент widh DOM javascript
- 19. Драйвер, не обнаруживающий дочерний браузер
- 20. PHPProjekt, обнаруживающий неправильную версию PHP
- 21. Xcode 7, обнаруживающий причину SIGABRT
- 22. Приемник вещания, не обнаруживающий SMS
- 23. Обнаруживающий угол с помощью Kinect
- 24. Весенний сканер, не обнаруживающий компонент
- 25. Pygame, обнаруживающий столкновения между фотографиями
- 26. Проект, не обнаруживающий фильтр Java
- 27. JTable, TableColumnModelListener, обнаруживающий выбранную строку
- 28. Hough transform R PET-пакет, обнаруживающий линию
- 29. Android-телефон, не обнаруживающий RFD22102 RFduino DIP
- 30. Bellman Ford, обнаруживающий отрицательный цикл кратчайшей длины
Ok. Спасибо :) – Max