<< Chapter < Page | Chapter >> Page > |
package CustomClasses{
import mx.effects.Effect;import mx.effects.IEffectInstance;
import mx.events.EffectEvent;public class CustomEffect extends Effect{//Would prefer to make these private and use implicit// setter methods, but I decided to leave them public
// to simplify the code.public var theDuration:Number = 2000;//default value
public var rotateAngleFrom:Number = 0;//default valuepublic var rotateAngleTo:Number = 360;//default value
public var wipeShowTarget:Boolean = true;//defaultpublic var glowColor:uint = 0xFF0000;//default value
public var glowInner:Boolean = true;//default valuepublic var glowStrength:Number = 255;//default valuepublic function CustomEffect(target:Object=null){
super(target);instanceClass = CustomEffectInstance;
} //end constructoroverride protected function initInstance(instance:IEffectInstance):void{
super.initInstance(instance);CustomEffectInstance(instance).theDuration =
this.theDuration;CustomEffectInstance(instance).rotateAngleFrom =
this.rotateAngleFrom;CustomEffectInstance(instance).rotateAngleTo =
this.rotateAngleTo;CustomEffectInstance(instance).wipeShowTarget =
this.wipeShowTarget;CustomEffectInstance(instance).glowColor =
this.glowColor;CustomEffectInstance(instance).glowInner =
this.glowInner;CustomEffectInstance(instance).glowStrength =
this.glowStrength;} //end initInstance
//--------------------------------------------------//override public function
getAffectedProperties():Array{return ["rotation","rotationX","rotationY","x","y"];} //end getAffectedProperties
//--------------------------------------------------//} //end class
} //end package
Listing
package CustomClasses{
import mx.effects.EffectInstance;import mx.effects.Glow;
import mx.effects.Parallel;import mx.effects.Rotate;
import mx.effects.WipeRight;import mx.events.FlexEvent;public class CustomEffectInstance
extends EffectInstance{//Instantiate the individual effects that will be
// combined in parallel to produce the custom effect.private var wipeEffect:WipeRight = new WipeRight();
private var rotateEffect:Rotate = new Rotate();private var glowEffect:Glow = new Glow();//Variables for the storage of effect properties.
public var theDuration:Number;public var rotateAngleFrom:Number;
public var rotateAngleTo:Number;public var wipeShowTarget:Boolean;
public var glowColor:uint;public var glowInner:Boolean;
public var glowStrength:Number;public function CustomEffectInstance(theTarget:Object){
super(theTarget);//Set the target for all three individual effects.
rotateEffect.target = theTarget;wipeEffect.target = theTarget;
glowEffect.target = theTarget;} //end constructoroverride public function play():void{
super.play();//Note: The following values cannot be set in the// constructor because the variables aren't stable
// at that point in time.//Configure the rotate effectrotateEffect.angleFrom = rotateAngleFrom;
rotateEffect.angleTo = rotateAngleTo;rotateEffect.duration = theDuration;//Configure the wipe effect.
wipeEffect.showTarget = wipeShowTarget;wipeEffect.duration = theDuration;//Configure the glow effect.
glowEffect.color = glowColor;glowEffect.duration = theDuration;
glowEffect.inner = glowInner;glowEffect.strength = glowStrength;//Play all three effects in parallel.
var parallel:Parallel = new Parallel();parallel.addChild(rotateEffect);
parallel.addChild(glowEffect);parallel.addChild(wipeEffect);
parallel.play();} //end play
//--------------------------------------------------//} //end class
} //end package
/*CustomEffect02 11/26/09
*********************************************************/package CustomClasses{
import mx.containers.VBox;import mx.controls.Button;
import mx.controls.Label;import mx.controls.Spacer;
import flash.events.MouseEvent;public class Driver extends VBox{
//Instantiate and save references to all of the// objects needed by the program.
private var title:Label = new Label();private var btnA:Button = new Button();
private var btnB:Button = new Button();private var spacer:Spacer = new Spacer();
private var theEffect:CustomEffect =new CustomEffect();
//--------------------------------------------------//public function Driver(){//constructor//Make some space at the top of the display.
spacer.height = 40;addChild(spacer);//Set title properties and add to the VBox.
title.setStyle("color","0xFFFF00");title.setStyle("fontSize",14);
title.text = "Demo custom effect";addChild(title);
//Instantiate two buttons and add them to the VBox.// Register the same event listener on both of
// them.btnA.label = "Click me and watch the effect.";
btnA.addEventListener(MouseEvent.CLICK,handler);addChild(btnA);btnB.label = "Or click me instead.";
btnB.addEventListener(MouseEvent.CLICK,handler);addChild(btnB);
//Specify both buttons to be the target for the// same effect.
theEffect.targets = [btnA,btnB];//Set various properties needed by the effect.
theEffect.theDuration = 4000;theEffect.rotateAngleFrom = 0;
theEffect.rotateAngleTo = 720;theEffect.wipeShowTarget = true;
theEffect.glowColor = 0xFF0000;theEffect.glowInner = true;
theEffect.glowStrength = 255;} //end constructor
//--------------------------------------------------//public function handler(event:MouseEvent):void{theEffect.play();
}//end handler} //end class
} //end package
/*CustomEffect03 11/27/09
*********************************************************/package CustomClasses{
import mx.containers.VBox;import mx.controls.Button;
import mx.controls.Label;import mx.controls.Spacer;
public class Driver extends VBox{//Instantiate and save references to all of the
// objects needed by the program.private var title:Label = new Label();
private var btnA:Button = new Button();private var btnB:Button = new Button();
private var spacer:Spacer = new Spacer();private var theEffect:CustomEffect =
new CustomEffect();//--------------------------------------------------//public function Driver(){//constructor
//Make some space at the top of the display.spacer.height = 40;
addChild(spacer);//Set title properties and add to the VBox.title.setStyle("color","0xFFFF00");
title.setStyle("fontSize",14);title.text = "Demo custom effect";
addChild(title);//Instantiate two buttons and add them to the VBox.
// Register the same event listener on both of// them.
btnA.label = "Click me and watch the effect.";addChild(btnA);btnB.label = "Or click me instead.";
addChild(btnB);//Set various properties needed by the effect.theEffect.theDuration = 4000;
theEffect.rotateAngleFrom = 0;theEffect.rotateAngleTo = 720;
theEffect.wipeShowTarget = true;theEffect.glowColor = 0xFF0000;
theEffect.glowInner = true;theEffect.glowStrength = 255;//Apply the effect to the two buttons individually.
btnA.setStyle("mouseUpEffect",theEffect);btnB.setStyle("mouseUpEffect",theEffect);
} //end constructor//--------------------------------------------------//
} //end class} //end package
This section contains a variety of miscellaneous materials.
-end-
Notification Switch
Would you like to follow the 'Object-oriented programming (oop) with actionscript' conversation and receive update notifications?