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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.06.2013, 15:28
FSS вне форума Посмотреть профиль Отправить личное сообщение для FSS Найти все сообщения от FSS
  № 1  
Ответить с цитированием
FSS

Регистрация: Jun 2013
Сообщений: 16
По умолчанию Использования в качестве маски Ч/Б BMP файл

Собственно как использовать в качестве маски черно/белую бмпшку?
Суть задачи необходимо чтоб сквозь картинку(PNG), а точнее сквозь ее прозрачные участки, Можно было производить клики и тачи по спрайтам, которые находятся ниже(за картинкой с прозрачностью). Предполагаю что нужно использовать ЧБ бмпешку, где белый это пустота а черный - картинка.

Как это можно реолизовать средствами AS3
Если можно, то с примером пожалуйста.

Старый 24.06.2013, 15:52
maincode вне форума Посмотреть профиль Отправить личное сообщение для maincode Посетить домашнюю страницу maincode Найти все сообщения от maincode
  № 2  
Ответить с цитированием
maincode

Регистрация: Feb 2010
Адрес: Город суеты
Сообщений: 191
Маска должна быть не черно белая, а прозрачно-непрозрачная. Т.е. там где объект должен быть не видимым, маска должна быть прозрачная, а где хотим видеть объект - маска не прозрачная и не важно какого цвета. Что бы маска работала попиксельно, надо объекту и маске задать свойство cacheAsBitmap=true, пример можно посмотреть здесь.

Вам надо сделать что бы картинка была видна целиком, а кликабельны только определенные области? Тогда рисуем картинку, сверху накладываем прозрачный(alpha=0) Sprite, накладваем маску на Sprite, и слушаем клики на этот Sprite
__________________
FlashPress.ru | Blog

Старый 24.06.2013, 16:53
FSS вне форума Посмотреть профиль Отправить личное сообщение для FSS Найти все сообщения от FSS
  № 3  
Ответить с цитированием
FSS

Регистрация: Jun 2013
Сообщений: 16
Само изображение у меня PNG с уже прозрачными и непрозрачными участками.
Могу ли я использовать это же изображение в качестве маски?
И что значит "чтоб маска работала по пиксельно"?


И в общем-то почти да, у меня есть картинка "кусок карты местности" Все что за границами карты все прозрачное, а все что внутри, соответственно непрозрачное. Соответственно когда я кликаю/касаюсь по карте то события должны приходить спрайту с картой, а когда по прозрачному участку то спрайтам под картой.

Старый 24.06.2013, 16:56
maincode вне форума Посмотреть профиль Отправить личное сообщение для maincode Посетить домашнюю страницу maincode Найти все сообщения от maincode
  № 4  
Ответить с цитированием
maincode

Регистрация: Feb 2010
Адрес: Город суеты
Сообщений: 191
"чтоб маска работала по пиксельно" - это значит что бы скрывались пиксели картинки в том месте, где пиксели маски прозрачные, собственно то, что мы с вами здесь и обсуждаем.

В этом случае вам не надо дополнительных масок, кладите карту в Sprite, затем используйте эту же карту в виде маски Bitmap.
__________________
FlashPress.ru | Blog

Старый 24.06.2013, 17:02
FSS вне форума Посмотреть профиль Отправить личное сообщение для FSS Найти все сообщения от FSS
  № 5  
Ответить с цитированием
FSS

Регистрация: Jun 2013
Сообщений: 16
Такой способ, по непонятным для меня причинам, почему-то не пашет

Код AS3:
	[Embed(source='../../../../assets/Images/Map.png')]
        private static var _Map:Class;
 
....
			var map:DisplayObject = new _Map();
			var mapmask:DisplayObject = new _Map();
			map.cacheAsBitmap = true;
			mapmask.cacheAsBitmap = true;
			map.mask = mapmask;
			this.addChild(mapmask);
			this.addChild(map);

Старый 24.06.2013, 17:14
maincode вне форума Посмотреть профиль Отправить личное сообщение для maincode Посетить домашнюю страницу maincode Найти все сообщения от maincode
  № 6  
Ответить с цитированием
maincode

Регистрация: Feb 2010
Адрес: Город суеты
Сообщений: 191
покажите как выглядит картинка
__________________
FlashPress.ru | Blog

Старый 24.06.2013, 17:18
FSS вне форума Посмотреть профиль Отправить личное сообщение для FSS Найти все сообщения от FSS
  № 7  
Ответить с цитированием
FSS

Регистрация: Jun 2013
Сообщений: 16
Зато маска работает так как мне нужно вот в таком виде
Код AS3:
 
                        maskSpr.graphics.beginFill(0xFFFFFF);
			maskSpr.graphics.moveTo(10, 586);
			maskSpr.graphics.lineTo(133, 624);
			maskSpr.graphics.lineTo(149, 699);
			maskSpr.graphics.lineTo(230, 745);
			maskSpr.graphics.lineTo(245, 785);
			maskSpr.graphics.lineTo(338, 922);
			maskSpr.graphics.lineTo(363, 930);
			maskSpr.graphics.lineTo(405, 907);
			maskSpr.graphics.lineTo(410, 890);
 
			maskSpr.graphics.lineTo(400, 869);
			maskSpr.graphics.lineTo(432, 808);
			maskSpr.graphics.lineTo(533, 867);
			maskSpr.graphics.lineTo(572, 854);
 
			maskSpr.graphics.lineTo(630, 784);
			maskSpr.graphics.lineTo(768, 696);
 
			maskSpr.graphics.lineTo(768, 0);
			maskSpr.graphics.lineTo(0, 0);
			maskSpr.graphics.lineTo(0, 586);
 
			maskSpr.cacheAsBitmap = true;
Т.е. когда я ее сам, программно, рисую. Но этот способ от части приемлемый, но по своей сути геморойный, так как для каждой карты нужно будет отчерчивать область карты от области прозрачности...

Добавлено через 4 минуты
Цитата:
Сообщение от maincode Посмотреть сообщение
покажите как выглядит картинка
Представь себе карту России! на мировой карте. Затем возьми в фотошопе и все что за границами России тупо выдели да удали сделав прозрачным. Вот собственно и получится примерно моя карта. Только у меня карта не России )

Старый 24.06.2013, 18:47
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 8  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
FSS попробуйте так

Код AS3:
var tmp:Sprite = new Sprite();
 
tmp.addChild(new _Map());
 
var bounds:Rectangle = tmp.getRect(tmp);
var bmd:BitmapData = new BitmapData(bounds.width, bounds.height, true, 0x0);
 
var mapMask:Bitmap=new Bitmap(bmd, flash.display.PixelSnapping.ALWAYS, true);
 
var mtrx:Matrix = new Matrix();
mtrx.translate(-bounds.x, -bounds.y);
bmd.draw(tmp, mtrx);
 
mapMask.cacheAsBitmap = true;
 
var map:DisplayObject = new _Map();
map.cacheAsBitmap  = true;
 
addChild(mapMask);
addChild(map);
 
map.mask = mapMask;
Добавлено через 1 минуту
правда это скорей костыль нежели правильное решение.

Добавлено через 5 минут
и еще я может быть чего-то не понимаю, но что вы хотите увидеть? или у вас в последующем коде добавляются объекты в map? Потому что Вы делаете фактически маску для маски и изображение остается идентичным если в него не добавлять объекты или же полученную маску не налаживать еще куда-то.
__________________
return this...

Старый 09.07.2013, 12:11
FSS вне форума Посмотреть профиль Отправить личное сообщение для FSS Найти все сообщения от FSS
  № 9  
Ответить с цитированием
FSS

Регистрация: Jun 2013
Сообщений: 16
Цитата:
Сообщение от AlexCooper Посмотреть сообщение
FSS попробуйте так

Код AS3:
var tmp:Sprite = new Sprite();
 
tmp.addChild(new _Map());
 
var bounds:Rectangle = tmp.getRect(tmp);
var bmd:BitmapData = new BitmapData(bounds.width, bounds.height, true, 0x0);
 
var mapMask:Bitmap=new Bitmap(bmd, flash.display.PixelSnapping.ALWAYS, true);
 
var mtrx:Matrix = new Matrix();
mtrx.translate(-bounds.x, -bounds.y);
bmd.draw(tmp, mtrx);
 
mapMask.cacheAsBitmap = true;
 
var map:DisplayObject = new _Map();
map.cacheAsBitmap  = true;
 
addChild(mapMask);
addChild(map);
 
map.mask = mapMask;
Добавлено через 1 минуту
правда это скорей костыль нежели правильное решение.

Добавлено через 5 минут
и еще я может быть чего-то не понимаю, но что вы хотите увидеть? или у вас в последующем коде добавляются объекты в map? Потому что Вы делаете фактически маску для маски и изображение остается идентичным если в него не добавлять объекты или же полученную маску не налаживать еще куда-то.

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

В общем представь ситуацию когда есть карта карта (кусок карты):
Код AS1/AS2:
             \          /
              \   |--/   
                \/
Далее есть куча кликабельных и крутящихся по определенной орбите пиктограмм (типа меню)
Код AS1/AS2:
 
         o      o        o
O                              O
          O         O
Соответственно маленькие "o", в порядке отображения, находятся за картой, а большие "O" перед картой. И вот так вот они крутятся почти как планеты вокруг солнца.
Код AS1/AS2:
             \          /
         o    \   |--/   o
O               \/             O
          O         O
В итоге при клике на маленькую "o" я кликаю по карте

В принципе можно было бы отключить вроде возможность карты принимать события кликов, но тогда я получу возможность кликать сквозь карту по тем "o" что будут располагаться за картой
В итоге не задачка получается...
Проблема становится более проблемной так как те же объекты на карте в итоге окажутся фактически без маски... И будут кликаться как прямоугольники...

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
InteractivePNG смотрели?
А если только клики надо, без OVER/OUT, то можно еще упростить.
__________________
Reality.getBounds(this);

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

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

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


 


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


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