http://www.actionscript.com/states/srcview/index.html
以上分别是原文和代码的链接,作者在这篇里面讨论了使用AS创建程序的必要性,在这里讨论的是一个CUSTOM EFFECT的高级议题
作者还给出了详细的源代码分析真是非常的好啊
package com.actionscript.states
{
import mx.containers.Canvas;
import mx.states.State;
import mx.states.SetProperty;
public class HideScaler extends Canvas {
public function HideScaler() {
super();//调用父类的构造函数
initState();
}
private function initState():void {
var hideState:State = new State();
hideState.name = "hide";//设置其名字对象
//The overrides array is an assortment of various objects used to change specific aspects of a UIComponent's state.
//覆盖数组是各种对象的集合,用来改变UI对象的状态的各个方面(大家可以参照英文)
hideState.overrides.push(new SetProperty(this, "width", 0));
//使用mx.states.SetProperty来改变UI对象的长和宽
//当然还有mx.states.SetEventHandler 和mx.states.SetStyle.
hideState.overrides.push(new SetProperty(this, "height", 0));
states.push(hideState);//最后将新状态压栈以便在必要的时候调用之
}
}
}
以上是第一阶段,这个阶段实现的只是一个没有TWEEN效果的STATE,下面看第二阶段
var transEffect:Parallel = new Parallel(this);
//一个转移效果是一个定义转移效果应为多长,应该作用于某个UICOMPONET以及使用什么样的效果的类(在这个例子中是Resize)
//效果分为并发和顺序的,并发的转移效果同时作用于UICOMPONENT的所有UI对象,而顺序转移效果则一一作用于这些UI对象,其实选什么也不重要。
transEffect.duration = 400;
transEffect.children.push(new Resize(this));
//定义一个转移效果
var stateTransition:Transition = new Transition();
stateTransition.toState = stateTransition.fromState = "*";
stateTransition.effect = transEffect;
//为所有的状态转移设置此转移效果
transitions.push(stateTransition);
//应用转移效果
这里分析的只是若干重要的代码,详细的分析还要看作者的原文档。