Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Starling] Custom HitTest of transparence. Как сделать? [TextureAtlas] (http://www.flasher.ru/forum/showthread.php?t=212287)

zCHESNOKz 14.01.2016 21:58

Custom HitTest of transparence. Как сделать? [TextureAtlas]
 
Вложений: 2
Как сделать проверку HitTest относительно прозрачности изображения (Image) ?

(Можно написать подкласс Image, передавая в конструктор класса вместо Texture - Bitmap/BitmapData. И переопределить метод HitTest проверяя прозрачность пиксела BitmapData)

Но это работает только если изображения хранятся каждое отдельно. Дело в том что у меня вся графика хранится в текстурномАтласе. А метод который вырезает с него нужное изображение возвращает SubTexture. А нам надо где то взять Bitmap/BitmapData.

Что подскажете делать? Как вы решаете проблему с HitTest прозрачности изображения?

#Update#

Если не получится, то есть идея сделать как то так (фото) Не очень, но думаю лучше чем ничего.
Красная область - область Image.
Зеленая область - Quad на каждом интерактивном элементе с нужными [x,y,scaleX,scaleY,rotation]

И для более сложных форм (следующее фото) :D

Но мне также потребуются круги, с прозрачным не кликабельным фотом. Получается их нужно будет хранить отдельно от атласа основных текстур? И пользоваться по нужде проверкой на прозрачность.

caseyryan 14.01.2016 22:13

У текстуры невозможно определить прозрачность. Все это делается только с помощью растровых изображений.

zCHESNOKz 14.01.2016 22:21

Цитата:

Сообщение от caseyryan (Сообщение 1190792)
У текстуры невозможно определить прозрачность.

Плохо. Тогда как вариант - вырезать самому из Атласа нужный Rectangle битмапыДаты например copypixel ом. И передавать уже в CustomHitImage. Только я не смогу узнать параметры позиции и размера этого Rectangle, как это делает getTexture().

Цитата:

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

faraday 14.01.2016 22:56

Писал не так давно, работает с любыми текстурами и displayObject + трансформации
Код AS3:

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)
                }


zCHESNOKz 15.01.2016 00:53

Цитата:

Сообщение от faraday (Сообщение 1190795)
Писал не так давно, работает с любыми текстурами и displayObject + трансформации

Объясни пожалуйста как это использовать? Нужно заранее получить Event.CONTEXT3D_CREATE ?

Код AS3:

сontext = Stage3D( event.target ).context3D;


faraday 15.01.2016 04:04

после инициализации старлинга, context=Starling.current.context; еще helperPoint=new point() нужно в переменные добавить

caseyryan 15.01.2016 08:13

Цитата:

Сообщение от zCHESNOKz (Сообщение 1190794)
Не, не подходит. Ведь лучше когда все текстуры находятся в атласе нежели по отдельности. Да?

Лучше по отдельности. Во-первых размеры атласа ограничены на 2048*2048, а во вторых оперативки такой растр при загрузке жрёт намного больше. Ты это поймёшь, когда на каком нибудь реальном устройстве твоя игра начнёт ни с того ни с сего крэшиться


Часовой пояс GMT +4, время: 09:37.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.