11.11.添加视图States到Flash组件
11.11.1. 问题
我想使用Flash 组件作为states。
11.11.2. 解决办法
在UIMovieClip 或ContainerMovieClip 实例内提供帧标签作为states。
11.11.3. 讨论
首先创建将在Flex 应用程序中实例化的类。在Flex 程序中如果没有添加子对象则这个类必须扩展自UIMovieClip 类,否则需扩展自ContainerMovieClip 类,例如:
currentState 和gotoAndStop 方法被重写,这样当他们改变和TextField 被添加时两个方法都能输出信息。Figure 11-1 清楚显示多个Flash 帧,标记为First, Second, 和Third,这些在Flex程序里将被作为states。
注意要改变FlashAssetClass 对象的state,你只要设置下currentState 属性即可,和一般的组件差不多。
当state 改变时,ContainerMovieClip 类默认下调用gotoAndStop 方法,停止帧回放。如果你要设置currentState 来播放指定的动画,你可以重写currentState setter 去调用gotoAndPlay 方法,这样将不能停止帧回放,例如:
我想使用Flash 组件作为states。
11.11.2. 解决办法
在UIMovieClip 或ContainerMovieClip 实例内提供帧标签作为states。
11.11.3. 讨论
首先创建将在Flex 应用程序中实例化的类。在Flex 程序中如果没有添加子对象则这个类必须扩展自UIMovieClip 类,否则需扩展自ContainerMovieClip 类,例如:
+展开
-ActionScript
package{
import flash.text.TextField;
import mx.flash.ContainerMovieClip;
public class FlashAssetClass extends ContainerMovieClip{
private var txt:TextField;
public function FlashAssetClass() {
txt = new TextField();
addChild(txt);
txt.text = "INIT";
super();
}
override public function set
currentState(value:String):void {
trace(" set current state ");
super.currentState = value;
txt.text = value;
}
override public function gotoAndStop(frame:Object,
scene:String=null):void {
trace(" go to and stop ");
txt.text = String(frame);
super.gotoAndStop(frame, scene);
}}
}
import flash.text.TextField;
import mx.flash.ContainerMovieClip;
public class FlashAssetClass extends ContainerMovieClip{
private var txt:TextField;
public function FlashAssetClass() {
txt = new TextField();
addChild(txt);
txt.text = "INIT";
super();
}
override public function set
currentState(value:String):void {
trace(" set current state ");
super.currentState = value;
txt.text = value;
}
override public function gotoAndStop(frame:Object,
scene:String=null):void {
trace(" go to and stop ");
txt.text = String(frame);
super.gotoAndStop(frame, scene);
}}
}
currentState 和gotoAndStop 方法被重写,这样当他们改变和TextField 被添加时两个方法都能输出信息。Figure 11-1 清楚显示多个Flash 帧,标记为First, Second, 和Third,这些在Flex程序里将被作为states。
Figure 11-1. Creating distinct frames within the Flash IDE
+展开
-XML
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400"
height="400" creationComplete="createComp()">
<mx:Script>
<![CDATA[
import mx.controls.Label;
import FlashAssetClass;
private var classInst:FlashAssetClass;
private function createComp():void {
classInst = new FlashAssetClass();
rawChildren.addChild(classInst);
invalidateDisplayList();
}
]]>
</mx:Script>
<mx:Button click="classInst.currentState='First';"
label="First" y="300"/>
<mx:Button click="classInst.currentState='Second';"
label="First" y="330"/>
<mx:Button click="classInst.currentState='Third';"
label="First" y="360"/>
</mx:Canvas>
height="400" creationComplete="createComp()">
<mx:Script>
<![CDATA[
import mx.controls.Label;
import FlashAssetClass;
private var classInst:FlashAssetClass;
private function createComp():void {
classInst = new FlashAssetClass();
rawChildren.addChild(classInst);
invalidateDisplayList();
}
]]>
</mx:Script>
<mx:Button click="classInst.currentState='First';"
label="First" y="300"/>
<mx:Button click="classInst.currentState='Second';"
label="First" y="330"/>
<mx:Button click="classInst.currentState='Third';"
label="First" y="360"/>
</mx:Canvas>
注意要改变FlashAssetClass 对象的state,你只要设置下currentState 属性即可,和一般的组件差不多。
当state 改变时,ContainerMovieClip 类默认下调用gotoAndStop 方法,停止帧回放。如果你要设置currentState 来播放指定的动画,你可以重写currentState setter 去调用gotoAndPlay 方法,这样将不能停止帧回放,例如:
+展开
-ActionScript
override public function set currentState(value:String):void {
trace(" set current state ");
//super.currentState = value;
gotoAndPlay(value);
txt.text = value;
trace(" set current state ");
//super.currentState = value;
gotoAndPlay(value);
txt.text = value;
加支付宝好友偷能量挖...