2d Graphics - обнаружение спрайтов - PullRequest
0 голосов
/ 12 августа 2011

Я работаю над небольшим приложением, которое использует спрайты, которые отрисовываются с использованием canvas и простого drawBitmap.

Как только пользователь коснется экрана, мне нужно знать, на каком спрайте был нажат. Я могу достичь этой цели, когда обрабатываю каждый спрайт как прямоугольник с шириной и высотой изображения. Тем не менее, некоторые из спрайтов занимают только небольшую часть всего прямоугольника, и я хотел бы игнорировать, когда пользователь щелкает внутри прямоугольника, но не на внутренней форме.

Есть идеи, что может быть хорошим способом сделать это?

Редактировать: просто чтобы быть более ясным, скажем, у меня есть спрайт размером 200x200, спрайт - это изображение самолета сверху, а у самолета длинные длинные крылья. Поскольку крылья длинные, в спрайте будет много «мертвых» областей. Я хотел бы определить, когда пользователь нажимает только на самолет, а не на «мертвую» область.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

Вам нужно будет создать 2d массив всех пикселей в растровом изображении. Маскируйте пиксели либо в 0 (прозрачный), либо в 1 (имеет цвет). Затем, когда вы щелкаете внутри прямоугольника, вам просто нужно получить смещение ширины и смещение высоты внутри прямоугольника. Это дает вам ваши индексы для сопоставления с массивом пикселей. Затем проверьте и посмотрите, содержит ли индекс в массиве пикселей значение 1. Если это так, то вы нажали на фактическое изображение. Имеет ли это смысл?

2 голосов
/ 12 августа 2011

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

Поскольку вы разработали свой вопрос, я сделаю еще одно предложение.

Когда вы обнаружили щелчок по спрайту, просто проверьте (в области Bitmap) текущий пиксель с помощью функции Bitmap.getPixel(). Затем вы можете легко проверить, является ли цвет в указанной позиции что-то , которое вас интересует, в противном случае вы можете просто пропустить обнаружение касания.

...