Обнаружение касания объектов экрана .NET - PullRequest
0 голосов
/ 16 декабря 2009

Как можно было бы обнаружить, если два изображения на экране (форма) касаются друг друга в C #?

У меня есть небольшая игра, в которой я должен выяснить, касаются ли два объекта (изображения объектов) друг друга.

Есть ли простой способ реализовать это?

Ответы [ 3 ]

3 голосов
/ 16 декабря 2009

Быстрый и грязный способ - проверить ограничивающие прямоугольники:

if (a.left <= b.right && b.left <= a.right &&
    a.top <= b.bottom && b.top <= a.bottom)

Если вам нужно идеальное по пикселям обнаружение на вещах, связанных с прозрачностью, все становится намного сложнее.

1 голос
/ 16 декабря 2009

Самый быстрый способ - рассматривать каждый объект как круг с радиусом, который обычно близок к его периметру, и пару координат X, Y его центра. Затем вычислите расстояние между двумя центрами объектов и сравните его с суммой их радиусов. Если сумма их радиусов больше расстояния между их центрами, они соприкасаются.

0 голосов
/ 16 декабря 2009

рассматривая их как прямоугольники, вы можете рассмотреть возможность получения координат точек каждой точки каждого изображения. затем проверьте каждую точку, если один больше другого (точка) из другого изображения.

что-то вроде:

/// each point represent the points in the images
Point ImageAUpperLeft; 
Point ImageAUpperRight; 
Point ImageALowerLeft; 
Point ImageALowerRight; 
Point ImageBUpperLeft; 
Point ImageBUpperRight; 
Point ImageBLowerLeft; 
Point ImageBLowerRight;
Point[] PtsList = new Point[] { ImageAUpperLeft, ImageAUpperRight, ImageALowerLeft, ImageALowerRight, ImageBUpperLeft, ImageBUpperRight, ImageBLowerLeft, ImageBLowerRight }; 

/// perform checking here, like:
if (ImageAUpperLeft coincides with ImageBUpperLeft) || (... so on so forth

Я думаю, что вы знаете алгоритм продолжения этого, но если он все еще не ясен, вы можете публиковать свои вопросы в качестве комментариев здесь был бы рад помочь ...:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...