Показать сообщение отдельно
Старый 15.10.2012, 13:47
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 15  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Frost47rus
Код AS3:
if (layout.getChildByName('hit') == null)
dispatchEvent(new MouseEvent(MouseEvent.CLICK));
(_enabled == true) ? turnOn() : turnOff();
Мне не о чем с Вами говорить далее.

Wolsh, Silin - ну тогда давай те я приведу полный код, своей сборки и мы вместе выясним где же я косячу.

Вот код любой кнопки

Код AS3:
package pro.clonez.slots 
{
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	import flash.text.TextField;
 
	/**
	 * ...
	 * @author in4core lab
	 */
	public class EvaluteButton extends MovieClip 
	{
		public var tf:TextField;
		private var _isEnabled:Boolean = true;
 
		public function EvaluteButton() 
		{
			this.mouseChildren = false;
			this.buttonMode = true;
			this.tabChildren = false;
			this.tabEnabled = false;
 
			this.addEventListener(MouseEvent.MOUSE_OVER , this.over);
			this.addEventListener(MouseEvent.MOUSE_OUT , this.out);
			this.addEventListener(MouseEvent.CLICK , this.release);
			this.addEventListener(MouseEvent.MOUSE_DOWN , this.down);
		}
 
		public function down(e:MouseEvent):void 
		{
			this.gotoAndStop('down');
		}
 
		public function release(e:MouseEvent):void 
		{
			if (stage) 
			{
				if (this.hitTestPoint(stage.mouseX , stage.mouseY)) 
				{
					this.over(e);
				}
				else 
				{
					this.out(e);
				}
			}
 
		}
 
		public function out(e:MouseEvent):void 
		{
			this.gotoAndStop('simple');
		}
 
		public function over(e:MouseEvent):void 
		{
			this.gotoAndStop('over');
		}
 
		public function disable():void
		{
			this.removeEventListener(MouseEvent.CLICK , this.release);
			this.removeEventListener(MouseEvent.MOUSE_OVER , this.over);
			this.removeEventListener(MouseEvent.MOUSE_OUT , this.out);
			this.removeEventListener(MouseEvent.MOUSE_DOWN , this.down);
			this.mouseEnabled = false;
			this.buttonMode = false;
			this.gotoAndStop("inactive");
			this._isEnabled = false;
		}
 
		public function enable():void
		{
			this.addEventListener(MouseEvent.MOUSE_OVER , this.over);
			this.addEventListener(MouseEvent.MOUSE_OUT , this.out);
			this.addEventListener(MouseEvent.CLICK , this.release);
			this.addEventListener(MouseEvent.MOUSE_DOWN , this.down);
			this.mouseEnabled = true;
			this.out(null);
			this.buttonMode = true;
			this._isEnabled = true;
		}
 
		public function get isEnabled():Boolean 
		{
			return _isEnabled;
		}
 
	}
 
}
Как мы видим при disabled - слушатели снимаются четко.

Имеем 2 кнопки. - и + . При определенных условиях нажатия 1й или второй, одна из них блокируется, либо не блокируется ни одна. Смотрим

Код AS3:
this._hud.mline.addEventListener(MouseEvent.CLICK , minusLine);
this._hud.pline.addEventListener(MouseEvent.CLICK , plusLine);
Код AS3:
private function minusLine(e:MouseEvent):void 
		{
			this.dispatchEvent(new HUDViewEvent(HUDViewEvent.MINUS_LINE));
		}
 
		private function plusLine(e:MouseEvent):void 
		{
			this.dispatchEvent(new HUDViewEvent(HUDViewEvent.PLUS_LINE));
		}
Когда моделька упдейтится начинаем проверочку

Код AS3:
private function updateCurrentLine(e:HUDModelEvents):void 
		{
			if (this._hudModel.currentLine === this._hudModel.numLines)
			{
				//this._hud.pline.removeEventListener(MouseEvent.CLICK , plusLine);
				this._hud.pline.disable();
			}
			else if (this._hudModel.currentLine === 1) 
			{
				//this._hud.mline.removeEventListener(MouseEvent.CLICK , minusLine);
				this._hud.mline.disable();
			}
			else
			{
				if (!this._hud.pline.isEnabled) 
				{
					this._hud.pline.enable();
					//this._hud.pline.addEventListener(MouseEvent.CLICK , plusLine);
				}
				if (!this._hud.mline.isEnabled) 
				{
					this._hud.mline.enable();
					//this._hud.mline.addEventListener(MouseEvent.CLICK , minusLine);
				}
			}
		}
Выложил полный код, чтобы было видно где может быть косяк.
Видно - что кнопка подписана на 2 клика, первый происходит сразу же, второй(логика) по событию от модельки . Я специально унес в комментарии удаление второго слушателя, так было изначально - и при таком подходе мы получали следующее - over , down , disable (!!! сняли клик) , release , over . При подходе 2 ( убрав комментарии , тоесть снимая и второго слушателя ) - over , down , disable ! - все верно. Где же я косячу?
__________________
Марк Tween