Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.01.2016, 21:58
zCHESNOKz вне форума Посмотреть профиль Отправить личное сообщение для zCHESNOKz Посетить домашнюю страницу zCHESNOKz Найти все сообщения от zCHESNOKz
  № 1  
Ответить с цитированием
zCHESNOKz
 
Аватар для zCHESNOKz

Регистрация: 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.
Старый 14.01.2016, 22:13
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
У текстуры невозможно определить прозрачность. Все это делается только с помощью растровых изображений.

Старый 14.01.2016, 22:21
zCHESNOKz вне форума Посмотреть профиль Отправить личное сообщение для zCHESNOKz Посетить домашнюю страницу zCHESNOKz Найти все сообщения от zCHESNOKz
  № 3  
Ответить с цитированием
zCHESNOKz
 
Аватар для zCHESNOKz

Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
Цитата:
Сообщение от caseyryan Посмотреть сообщение
У текстуры невозможно определить прозрачность.
Плохо. Тогда как вариант - вырезать самому из Атласа нужный Rectangle битмапыДаты например copypixel ом. И передавать уже в CustomHitImage. Только я не смогу узнать параметры позиции и размера этого Rectangle, как это делает getTexture().

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

Старый 14.01.2016, 22:56
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 4  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
Писал не так давно, работает с любыми текстурами и 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)
		}

Старый 15.01.2016, 00:53
zCHESNOKz вне форума Посмотреть профиль Отправить личное сообщение для zCHESNOKz Посетить домашнюю страницу zCHESNOKz Найти все сообщения от zCHESNOKz
  № 5  
Ответить с цитированием
zCHESNOKz
 
Аватар для zCHESNOKz

Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
Цитата:
Сообщение от faraday Посмотреть сообщение
Писал не так давно, работает с любыми текстурами и displayObject + трансформации
Объясни пожалуйста как это использовать? Нужно заранее получить Event.CONTEXT3D_CREATE ?

Код AS3:
сontext = Stage3D( event.target ).context3D;
__________________
Flash мертв жив!

Старый 15.01.2016, 04:04
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 6  
Ответить с цитированием
faraday
 
Аватар для faraday

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

Старый 15.01.2016, 08:13
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от zCHESNOKz Посмотреть сообщение
Не, не подходит. Ведь лучше когда все текстуры находятся в атласе нежели по отдельности. Да?
Лучше по отдельности. Во-первых размеры атласа ограничены на 2048*2048, а во вторых оперативки такой растр при загрузке жрёт намного больше. Ты это поймёшь, когда на каком нибудь реальном устройстве твоя игра начнёт ни с того ни с сего крэшиться

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:18.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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