|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
|
Custom HitTest of transparence. Как сделать? [TextureAtlas]
Как сделать проверку HitTest относительно прозрачности изображения (Image) ?
(Можно написать подкласс Image, передавая в конструктор класса вместо Texture - Bitmap/BitmapData. И переопределить метод HitTest проверяя прозрачность пиксела BitmapData) Но это работает только если изображения хранятся каждое отдельно. Дело в том что у меня вся графика хранится в текстурномАтласе. А метод который вырезает с него нужное изображение возвращает SubTexture. А нам надо где то взять Bitmap/BitmapData. Что подскажете делать? Как вы решаете проблему с HitTest прозрачности изображения? #Update# Если не получится, то есть идея сделать как то так (фото) Не очень, но думаю лучше чем ничего. Красная область - область Image. Зеленая область - Quad на каждом интерактивном элементе с нужными [x,y,scaleX,scaleY,rotation] И для более сложных форм (следующее фото) Но мне также потребуются круги, с прозрачным не кликабельным фотом. Получается их нужно будет хранить отдельно от атласа основных текстур? И пользоваться по нужде проверкой на прозрачность.
__________________
Flash Последний раз редактировалось zCHESNOKz; 14.01.2016 в 22:31. |
|
|||||
Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
|
Плохо. Тогда как вариант - вырезать самому из Атласа нужный Rectangle битмапыДаты например copypixel ом. И передавать уже в CustomHitImage. Только я не смогу узнать параметры позиции и размера этого Rectangle, как это делает getTexture().
Цитата:
__________________
Flash |
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
Писал не так давно, работает с любыми текстурами и displayObject + трансформации
private static var context:Context3D; private static var hitPixel:BitmapData = new BitmapData(1, 1); private static var hitRender:RenderSupport = new RenderSupport(); private static var hitColor:uint = 0xff00ff; // color for opacity indication public static function hitPixelPerfect(me:DisplayObject,localPoint:Point):Boolean { hitRender.nextFrame(); hitRender.clear(hitColor); me.localToGlobal(localPoint, helperPoint); me.parent.globalToLocal(helperPoint, helperPoint); hitRender.setProjectionMatrix(helperPoint.x, helperPoint.y, 1, 1, starlingStage.stageWidth, starlingStage.stageHeight, starlingStage.cameraPosition); hitRender.transformMatrix(me); hitRender.pushMatrix(); me.render(hitRender, 1); hitRender.popMatrix(); hitRender.finishQuadBatch(); context.drawToBitmapData(hitPixel); return (hitPixel.getPixel(0,0)!=hitColor) } |
|
|||||
Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
|
Цитата:
__________________
Flash |
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
после инициализации старлинга, context=Starling.current.context; еще helperPoint=new point() нужно в переменные добавить
|
|
|||||
Лучше по отдельности. Во-первых размеры атласа ограничены на 2048*2048, а во вторых оперативки такой растр при загрузке жрёт намного больше. Ты это поймёшь, когда на каком нибудь реальном устройстве твоя игра начнёт ни с того ни с сего крэшиться
|
Часовой пояс GMT +4, время: 20:18. |
|
« Предыдущая тема | Следующая тема » |
|
|