Показать сообщение отдельно
Старый 13.11.2011, 02:14
Ookami вне форума Посмотреть профиль Отправить личное сообщение для Ookami Найти все сообщения от Ookami
  № 50  
Ответить с цитированием
Ookami
 
Аватар для Ookami

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
менее громоздко:
Код AS3:
package ui.buttons
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;
 
	/**
	 * ...
	 * @author Ookami
	 */
	public class Button extends Sprite
	{
 
		private var stateNorm:Sprite;
		private var stateOver:Sprite;
		private var stateDown:Sprite;
 
		/*
		 * Конструктор класса
		 */
		public function Button(spriteNorm:Sprite, spriteOver:Sprite, spriteDown:Sprite)
		{
			/**
			 * Формирование тела кнопки
			 */
			stateNorm = spriteNorm;
			stateOver = spriteOver;
			stateDown = spriteDown;
			addChild(stateNorm);
			addChild(stateOver);
			addChild(stateDown);
			stateOver.visible = false;
			stateDown.visible = false;
			/**
			 * Прослушка событий
			 */
			addEventListener(MouseEvent.MOUSE_OVER, onMouseEvent);
			addEventListener(MouseEvent.MOUSE_OUT, onMouseEvent);
			addEventListener(MouseEvent.MOUSE_DOWN, onMouseEvent);
			addEventListener(MouseEvent.MOUSE_UP, onMouseEvent);
		}
 
		/*
		 * Фокус мыши на кнопке
		 */
		private function onMouseEvent(event:MouseEvent):void
		{
			stateNorm.visible = false;
			stateOver.visible = false;
			stateDown.visible = false;
			switch (event.type)
			{
				case MouseEvent.MOUSE_OVER: 
				{
					stateOver.visible = true;
					break;
				}
				case MouseEvent.MOUSE_OUT: 
				{
					stateNorm.visible = true;
					break;
				}
				case MouseEvent.MOUSE_DOWN: 
				{
					stateDown.visible = true;
					break;
				}
				case MouseEvent.MOUSE_UP: 
				{
					stateNorm.visible = true;
					break;
				}
			}
		}
 
	}
 
}
Цитата:
небольшое уточнение, из за того что у меня есть еще и textField поверх всех этих спрайтов, то возникал небольшой касячок при обработке фокуса и нажатия мыши. А именно нажатие срабатывало только на текстовом поле. Я так понял это из за того что спрайты скрываются. Я сделал еще один спрайт который содержит прозрачный png размером ровно с мою кнопку и поместил этот спрайт поверх всех остальных. Так обработка нажатия мыши срабатывает корректно.
Можно запретить чайлдам кнопки реагировать на мышь - так проще. Добавьте в конструктор класса
Код AS3:
			mouseChildren = false;