2013-07-11 2 views
0

У меня есть изображение размером 480x800 пикселей и есть значок на одном углу, который мне нужно разместить. Я хочу, чтобы игнорировать все касания прозрачных областей и обнаруживать только область, где находится значок. Я нашел solution in SO, но он просто говорит код, который будет использоваться. Мне нужно точно знать, где разместить этот код, так как я новичок и не знаю много о cocos2d, поэтому я ожидаю пошаговое решение.Игнорирование штрихов на прозрачных участках cocos2dx

Cocos2d 2.0 - Ignoring touches to transparent areas of layers/sprites

+0

добавить к классу объектов будет хорошо. –

+0

Вы могли бы объяснить подробно? – amyn

+0

, если у вас есть класс под названием Button (который может быть подклассом CCSprite), вы можете просто добавить этот код (переписать с помощью C++) в этот класс, и используя этот код вместе с CCTouchBegan –

ответ

0

Не используйте glReadPixels, потому что это влияет на ошибками андроид драйверов. Вы можете перевести CCTouch на CCPoint в координатах изображения с помощью convertTouchToNodeSpace и прочитать пиксель изображения в данной точке.

Создайте CCImage из файла, который содержит полупрозрачное изображение, и прочитайте один пиксель в точке перехода; он должен быть {0,0,0,0} для прозрачной области.

Не забудьте проверить, что кран не находится за пределами изображения, и создать индекс пикселя в массиве CCImage::getData() с формулами unsigned index = x * imageWidth + y.

+0

, я понимаю, что вы только что сказали. еще кое-что. что, если у меня есть 3 значка в том же формате, как описано выше, и теперь я хочу определить, был ли затронут какой-либо значок, и если какой-либо значок действительно был затронут, какой он был, как бы вы это решили? – amyn

+0

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

+0

вот что я сейчас делаю. есть фоновое изображение объекта ccsprite размером 480x800. то есть 3 объекта ccsprite размером 480x800, которые являются значками, расположенными над фоном. каждое изображение, имеющее значок, прозрачно от везде, где есть значок. если бы вы могли сказать мне, как решить проблему сейчас? будет сравнивать работу пикселей в этом случае? если да, то как мы получим пиксели от объекта ccsprite и от затронутых координат. – amyn