打印

[AS3] [as3游戏之问之二]如何动态加载库里的元件??[已解决]

AA = new XXX()这个里面 XXX 能不能是动态的?
我可不可以传个参数给他 ,让XX可以动态改变

·~~~比如要动态加载库里的元件怎么办?

难道需要做判断
case 1
aa = new AAA()
case 2
aa = new BBB()

这样太麻烦了~
as2可以 “AAAA”+参数

[ 本帖最后由 skyiscn 于 2007-9-4 18:18 编辑 ]
...[http://www.25swf.com]
AS3 中的反射实现[工厂模式]
2007-09-01 11:06:00 / 个人分类:Flash

因项目需要,在AS3中需要再次使用工厂模式,因为要生产的产品种类很多,因而使用switch不能使我满意.上网一找,发现早有无数达人已经有实现方法了,这次的实现方法对于AS2的反射实现来得更自然,因为使用的是AS3自带的方法.关于 AS2 的反射实现的可看我以前写的文章.

AS3 中用反射来实现工厂模式的代码 ,有下划线的为关键语句.
/*
* 工厂方法
*/
package cw.Factory
{
import flash.utils.getDefinitionByName;
import flash.display.*;
public class CardFactory
{
  static public function Make(_classname:String)
  {
   try
            {
                var ClassReference:Class = getDefinitionByName(_classname) as Class;
                return new ClassReference() as MovieClip;
            }
            catch(e:Error)
            {
                throw("error");
            }
  }
}
}

工厂已经创建好,接下来就是生产了.
假设有一元件,我们做以下设置

cw.Cards.CommonClass.Cards.p1034 这个类并不存在,但是FLASH在编译时会为我们自动生成这个类,Base class 则是该类的父类,当然,以后我会从MovieClip派生一个Card类,然后让Card类作为它的父类.但这并不影响下面的结果.
在主入口类的构造方法里,敲入以下代码便可以看到最终的结果了.

var mycard:MovieClip = CardFactory.Make("cw.Cards.CommonCLass.Cards.p1034")
   mycard.x = 100;
   mycard.y = 100
   addChild(mycard)

希望得到更多的交流  http://www.25swf.com
可以是动态的.可以传参数给它.使用新增的 Class 类型. 例: var mc:Class = MovieClip;  var my_mc:* = new mc();
天涯同是沦落人,?.
人生何处不相逢,?.
楼上的办法也不错 呵呵 简单

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
可不可以其他自定义类型的类进行反射呢?

TOP

嗯,这个贴子不错,先把它收藏了

TOP

加载外部的类的话可以酱紫:

//外部类为 Box.as
复制内容到剪贴板
代码:
Box;//这里是关键,一定要加上,有多少外部类都要加上,酱紫下面才能够识别到
var a:String="B";
var b:String="ox";
var box:Class=getDefinitionByName(a+b) as Class;
addChild(new box);
我要威望....>

TOP

类不多的话还可以用  interface , help 里有详细的用法

TOP