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 ! - все верно. Где же я косячу?