Показать сообщение отдельно
Старый 15.10.2012, 10:52
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 9  
Ответить с цитированием
Frost47rus

Регистрация: May 2012
Сообщений: 131
Цитата:
Сообщение от in4core Посмотреть сообщение
Frost47rus - мне кажется Вы Алеша! - или Вася - неважно. )) ты просто красавец. На будущее тебя просвещу, - нормальные люди вешают либо 1 либо 2 события. 1 событие вешается, если кнопка создана программно, или графически , не задействуя функционал . То в одном событии описывается и функционал и анимация(поведение). А есть случай, когда будете разрабатывать игры или хотя бы что то похожее - голова поймет, что для массовых кнопок прописывается ОБЩИЙ функционал сразу, - а функционал запуска - прописывается уже после, - получается 2 события ! Учи мат часть.
какая разница как создана кнопка? =)
листенер на клик у кнопки - один! =)
листенер на лэйауте - это листенер на лэйауте, но не на кнопке.
и внутренний клик эвент в кнопке всего лишь диспетчит какое-либо событие, как правило такое же.
извне - слушатель на одно событие - один.
не надо пудрить людям мозги. этот форум будут читать и новички - а вы им мозги запудриваете.

Добавлено через 42 минуты
Вот вам пример стандартной кнопки. Создаётся такая кнопка в Flash CS ручками послойно из графических ресурсов. Отрисовывается hitArea для каждой, если кнопки разные. Соответственно, имена полей - так же проставляются вручную ( по дефолту - 4 лейбла на 4 кадрах, 1 - для hitArea, 1 - для текстового поля.
Вешаются листенеры на такую кнопку как и на обычный SimpleButton.

Код AS3:
package ru.domain.project.view.gui.buttons {
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
	/**
	 * ...
	 * @author Frost
	 */
	public class MyButton extends EventDispatcher {
		private var hitArea:MovieClip;
		private var layout:MovieClip;
		private var _enabled:Boolean;
 
		public function MyButton(mc:MovieClip) {
			layout = mc;
			if (layout.getChildByName('hit') == null) {
				trace('MYBTN_ERROR: Cant find hit layer in MovieClip: ' + mc.name);
				return;
			}			
			hitArea = layout.getChildByName('hit') as MovieClip;
			enabled = true;
		}
 
		private function turnOn():void {
			hitArea.buttonMode = true;
			hitArea.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
			hitArea.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
			hitArea.addEventListener(MouseEvent.ROLL_OUT, onRollOut);			
			hitArea.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
			hitArea.addEventListener(MouseEvent.CLICK, onClick);			
			layout.gotoAndStop('up');
		}
 
		private function turnOff():void {
			hitArea.buttonMode = false;
			hitArea.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
			hitArea.removeEventListener(MouseEvent.ROLL_OVER, onRollOver);
			hitArea.removeEventListener(MouseEvent.ROLL_OUT, onRollOut);			
			hitArea.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
			hitArea.removeEventListener(MouseEvent.CLICK, onClick);
			layout.gotoAndStop('disabled');
		}
 
		public function get enabled():Boolean {
			return _enabled;
		}
 
		public function set enabled(val:Boolean):void {
			_enabled = val;
			(_enabled == true) ? turnOn() : turnOff();
		}
 
		public function text(txt:String):void {			
			var tf:TextField = layout.getChildByName('tf') as TextField;
			formatTextField(tf, txt);			
		}
 
		private function formatTextField(tf:TextField, e:String):void {
			tf.text = e;
			tf.selectable = false;
			//some other format settings
		}
 
		private function onClick(e:MouseEvent):void {
			dispatchEvent(new MouseEvent(MouseEvent.CLICK));			
		}
 
		private function onRollOver(e:MouseEvent):void {
			layout.gotoAndStop('over');
			dispatchEvent(new MouseEvent(MouseEvent.ROLL_OVER));
		}
 
		private function onRollOut(e:MouseEvent):void {
			layout.gotoAndStop('up');
			dispatchEvent(new MouseEvent(MouseEvent.ROLL_OUT));
		}
 
		private function onMouseUp(e:MouseEvent):void {
			layout.gotoAndStop('up');
		}
 
		private function onMouseDown(e:MouseEvent):void {
			layout.gotoAndStop('down');
		}		
	}
}