国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 網(wǎng)站 > WEB開發(fā) > 正文

12.2.建立一個(gè)自定義效果

2024-04-27 13:52:13
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
12.2.1 問(wèn)題
我想創(chuàng)建一個(gè)既可以在MXML 也可以在ActionScript 內(nèi)使用的自定義效果。
12.2.2 解決辦法
創(chuàng)建一個(gè)繼承Effect 的類以及任何你想要再實(shí)例化的時(shí)候傳入實(shí)例的getter 、setter 屬性。然后再創(chuàng)建一個(gè)繼承EffectInstance 的實(shí)例類,該類即是實(shí)際播放變化效果的類。
12.2.3 討論
在Flex 框架中,每個(gè)效果有兩個(gè)元素組成:一個(gè)Effect 和一個(gè)EffectInstance。Effect 創(chuàng)建EffectInstance 并傳遞屬性給它們。這種責(zé)任分配允許你輕易地創(chuàng)建在多個(gè)對(duì)象上播放的效果。

要這樣做的話,首先定義一個(gè)TestEffect 類(隨后創(chuàng)建EffectInstance 的工廠),設(shè)置它們的屬性,并且調(diào)用每個(gè)實(shí)例的play 方法:
+展開
-ActionScript
package oreilly.cookbook{
import mx.effects.Effect;
import mx.effects.IEffectInstance;
import mx.events.EffectEvent;
import oreilly.cookbook.TestInstance;
public class TestEffect extends Effect
{
public var color:uint;
public var alpha:Number;
public function TestEffect(target:Object=null) {
// call the base constructor of course
super(target);
// set our instance class to the desired instance type
instanceClass = TestInstance;
}
override protected function
initInstance(instance:IEffectInstance):void {
trace(" instance initialized ");
super.initInstance(instance);
// now that we've instantiated our instance, we can set
its properties
TestInstance(instance).color = color;
TestInstance(instance).alpha = alpha;
}
override public function getAffectedProperties():Array {
trace(" return all the target properties ");
return [];
}
override protected function
effectEndHandler(event:EffectEvent):void {
trace(" effect ended ");
}
override protected function
effectStartHandler(event:EffectEvent):void {
trace(" effect started ");
}
}
}

注意前面的代碼,在initInstance 方法里,創(chuàng)建EffectInstance 類的實(shí)例。TestInstance 類申明為TestInstance 類型,并且TestInstance 的屬性都設(shè)置為TestEffect 工廠的屬性值。這讓你可以通過(guò)TestEffect 工廠一次性設(shè)置每個(gè)TestInstance 實(shí)例的屬性。

由TestEffect 工廠生成的TestInstance 類代碼如下:
+展開
-ActionScript
package oreilly.cookbook{
import flash.display.DisplayObject;
import mx.core.Container;
import mx.core.FlexShape;
import mx.core.UIComponent;
import mx.effects.EffectInstance;
public class TestInstance extends EffectInstance
{
public var alpha:Number;
public var color:uint;
public function TestInstance(target:Object) {
super(target);
}
override public function play():void {
super.play();
(target as DisplayObject).alpha = alpha;
var shape:FlexShape = new FlexShape();
shape.graphics.beginFill(color, 1.0);
shape.graphics.drawRect(0, 0, (target as
DisplayObject).width, (target as
DisplayObject).height);
shape.graphics.endFill();
var uiComp:UIComponent = new UIComponent();
uiComp.addChild(shape);
UIComponent(target).addChild(uiComp);
}
}
}

創(chuàng)建TestInstance 的時(shí)候,每個(gè)TestInstance 的target 屬性都由TestEffect 工廠類設(shè)置。這保證如果傳入多個(gè)目標(biāo)對(duì)象給Effect 類的targets 屬性,TestEffect,一個(gè)TestInstance 的實(shí)例,將會(huì)創(chuàng)建并且在每個(gè)對(duì)象上播放。TestInstance 的color 和alpha 屬性將會(huì)在實(shí)例創(chuàng)建的時(shí)候由TestEffect 的initInstance 方法設(shè)置。

TestInstance 類里覆蓋的play 方法包含了顯示邏輯以改變分配給TestInstance 的目標(biāo)UIComponent。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 德化县| 卢龙县| 仁怀市| 明溪县| 乌海市| 锡林郭勒盟| 鄂尔多斯市| 霍城县| 始兴县| 当涂县| 东港市| 雷山县| 康保县| 茶陵县| 贵定县| 怀远县| 青冈县| 武义县| 威远县| 自治县| 收藏| 琼海市| 夏津县| 冕宁县| 若羌县| 汝南县| 长阳| 射阳县| 项城市| 习水县| 麻江县| 平江县| 历史| 右玉县| 赣榆县| 大埔区| 永福县| 新乡市| 林口县| 治多县| 抚州市|