charlescfenwick.com

February 14, 2009

Actionscript 3: Override a default public setter of an object.

This one can be pretty nifty. In my certain case I had a bunch of on screen items that I continually updating their alpha property but when there was a mouse over I didn’t want to update that property anymore and peg it right at 1 so it stood out. In this case it was a text field so here is a class with the not important parts taken out.

View CodeACTIONSCRIPT
package{
	import flash.text.TextField;
	import flash.events.MouseEvent;
	public class Tag extends TextField{
		private var alpha_locked:Boolean;
		public function Tag():void{
			this.alpha_locked = false;
			this.addEventListener(MouseEvent.MOUSE_OVER, mouse_over);
			this.addEventListener(MouseEvent.MOUSE_OUT, mouse_out);
		}
		private function mouse_over(e:MouseEvent):void{
			this.alpha = 1;
			this.alpha_locked = true;
		}
		private function mouse_out(e:MouseEvent):void{
			this.alpha_locked = false;
		}
		override public function set alpha(a:Number):void{
			if(!alpha_locked) super.alpha = a;
		}
	}
}

The magic happens with the super.alpha, super which refers to the parent class that Tag inherits from. It checks the alpha_locked variable and if things are ok it sets it, otherwise it’s ignored. Then the alpha locked variable is controlled by the MouseOver and MouseOut events.

Powered by WordPress