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

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

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

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
По умолчанию rollover картинка png

у меня есть картинка png. Некоторые её области прозрачны. Создаю клип buttonmode делаю true и заганяю в него png. Как сделать чтобы мышь меняла курсор только в видимой зоне???

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

Регистрация: Jan 2009
Сообщений: 60
Отправить сообщение для serenkiy с помощью ICQ
Вам поможет метод getPixel32 у BitmapData картинки. Считываете пиксель под курсором, смотрите на его alpha-компонент (прозрачность).


Последний раз редактировалось serenkiy; 10.04.2009 в 23:02.
Старый 10.04.2009, 23:56
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 3  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
http://blog.mosessupposes.com/?p=40

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

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
короче говоря написал я функцию

Код AS3:
private function createMask(img)
{
	var mask_sp=new Sprite();
	mask_sp.graphics.lineStyle(1,0x000000,0);
 
	var myData=img.bitmapData;
 
	for(var i=0; i<myData.width; i++)
	{
		for(var j=0; j<myData.height; j++)
		{
			var pix=myData.getPixel32(i,j);
			if((pix & 0x000000ff)>0)
			{
				mask_sp.graphics.moveTo(i,j);
				mask_sp.graphics.lineTo(i+1,j);
			}
		}
	}
 
	addChild(mask_sp);
	//mask_sp.buttonMode=true;
	mask_sp.addEventListener(MouseEvent.ROLL_OVER,handleMouseEvent)
}
 
private function handleMouseEvent(e:MouseEvent)
{
	dispatchEvent(new MouseEvent(e.type));
	//trace(1);
}
То есть. Я создал прозрачный спрайт который формой в точности повторяет мой клип. Так же как вы видите, если я навожу на спрайт мышкой, то это оповещается как событие всего класса. Но ведь оно оповещается и когда я навожу мышкой на битмап (то есть и на прозрачную область тоже)... Можно ли вырубить оповещение в этом случае???

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

Регистрация: Jan 2009
Сообщений: 60
Отправить сообщение для serenkiy с помощью ICQ
Попробуйте вместо
Код AS3:
pix & 0x000000ff
написать
Код AS3:
(pix & 0xff000000) >> 24
изменить ф-цию handleMouseEvent:
Код AS3:
private function handleMouseEvent(e:MouseEvent)
{
    if((e.target as Sprite).hitTestPoint(e.localX,e.localY,true)) {
        dispatchEvent(new MouseEvent(e.type));
        //trace(1);
    }
}


Последний раз редактировалось serenkiy; 11.04.2009 в 04:26.
Старый 11.04.2009, 12:57
incvizitor вне форума Посмотреть профиль Отправить личное сообщение для incvizitor Найти все сообщения от incvizitor
  № 6  
Ответить с цитированием
incvizitor
 
Аватар для incvizitor

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
Цитата:
Сообщение от serenkiy Посмотреть сообщение

Код AS3:
(pix & 0xff000000) >> 24
Так я узнаю канал RED, зачем он мне? спрайт создаётся нармально, и функция тоже оповещает событие когда надо.

Только вот класс Sprite оповещает событие и сам по себе. То есть если бы я даже не написал функцию handleMouseEvent, так вот можно ли отключить этот стандартный оповеститель???

Теоретически можно былобы написать свой класс расщиряющий MouseEvent. Но может быть и без этого получится

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

Регистрация: Jan 2009
Сообщений: 60
Отправить сообщение для serenkiy с помощью ICQ
Цитата:
Сообщение от incvizitor Посмотреть сообщение
Так я узнаю канал RED, зачем он мне?...
Так Вы узнаете канал Alpha. Ф-ция getPixel32 возвращает значение цвета ARGB, а не RGBA.

Добавлено через 40 минут
Вообще, без всяких ухищрений, можно сделать так: ваш прозрачный Bitmap помещаете в контейнер (Sprite), на контейнер вешаете листенер:
Код AS3:
container.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
ну и разумеется описание приемника:
Код AS3:
private function mouseMoveHandler(e:MouseEvent):void {
	if (((yourBitmap.bitmapData.getPixel32(e.localX, e.localY) & 0xFF000000) >> 24) != 0x00) 
        trace ("Непрозрачная область"); 
        else trace("Прозрачная область");
}


Последний раз редактировалось serenkiy; 11.04.2009 в 14:58.
Старый 11.04.2009, 15:53
incvizitor вне форума Посмотреть профиль Отправить личное сообщение для incvizitor Найти все сообщения от incvizitor
  № 8  
Ответить с цитированием
incvizitor
 
Аватар для incvizitor

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
Да но в таком случае эту функцию надо будет переписывать каждый раз... Я вот так сделал.

Код AS3:
private function createMask(img)
{
	mask_sp=new Sprite();
 
	var myData=img.bitmapData;
 
	for(var i=0; i<myData.width; i++)
	{
		for(var j=0; j<myData.height; j++)
		{
			var pix=myData.getPixel32(i,j);
			if((uint(pix & 0xff000000) >>> 24 ) > 0)
			{
				with(mask_sp.graphics)
				{
					beginFill(0x000000);
					drawRect(i,j,1,1);
					endFill();
				}					
			}
		}
	}
 
	addChild(mask_sp);
	img.mask=mask_sp;	
}
поесню код:

Насчет ARGB ты был прав, только в этом случае надо результат операции
"pix & 0xff000000" надо трасформировать в uint, так как в обычном int если первая цифра это 1, значит номер отрицательный. Также для шифта надо использовать оператор ">>>", так как ">>" тоже может превратить загнать ваш номер в минис.

Что бы не мучаться с деспетчерами, прото наложил маску на PNG. Раньше компилятор её не распознавал, так как она была нарисована линиями. Но сечас, так как она нарисова квадратами она распознается. Короче работает, всем спасибо за помощь

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

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

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


 


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


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