作者STARGAZERs (星之影)
看板Flash
标题Re: [问题] 如何方便的 new 新物件 ???
时间Mon Jul 12 15:37:16 2010
※ 引述《yhn0tgb60 (呦厚厚)》之铭言:
前面恕删!!
:
:
: 而因为物件的种类有上百种
: 那我的 case() 就要把上百种
: 这样很没效率
: 而且我已经特地把 String 的内容 设定跟物件的名称一样了
: 有办法直接用 String 的名称来 new 物件吗 ???
: 例如像这样
:
: var _array:Array = [ 很多笔String ];
:
: for( var i in _array )
: {
: var _mc:MovieClip = new _array[i]();
: }
:
: 的办法解决吗 ???
:
:
hmm.... 不知道我有没有会错意
不过你要的是这种写法吗?
var Descript:Sprite = new Sprite;
var LvArray:Array = new Array(SealLv1, SealLv2, SealLv3, SealLv4);
var Level:int = 0;
while ( Level < _obj.level) {
var LvSymbol:MovieClip = new LvArray[Level];
Descript.addChild(LvSymbol);
Level++
}
上面这串是我早上随意测试的成品
也刚好是我现在手上Case的一串 code
Descript 是一个 Sprite
SealLv1 ~ SealLv4 是四个不同的 movieClip
虽然要呼叫做好的 mc
应该是 var Lv1:SealLv1 = new SealLv1;
可是我测试 var Lv1:MovieClip = new Array[i];
这种呼叫方式也可以用 所以就.... 用了!!
不过我也想知道上面两种呼叫方法有没有差异!!
不知道是否有高手可以解答 ?
: 另外就是假如要像上面的方法那样做一大串的 case
: 想请问用 switch 的效能比较好 ??? 还是用 if else 的效能比较好 ???
: 谢谢了 ^^
这好像要看编译器...
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 122.116.155.241
: 推 kawasumimai:好像有看过new MovieClip(xxxxxx(String))的写法 07/11 01:10
: → cjcat2266:new Class(getDefinitionByName(i))(); 07/11 01:10
: → cjcat2266:i为qualified class name 07/11 01:10
我对 CJ 大的方式很好奇...
( 先去 google 看看好了!!)
以下是 google 到的范例XD
import flash.utils.getDefinitionByName; //必须import
var declarePage:Class = getDefinitionByName("page" + index) as Class;
var _mc:MovieClip = new declarePage();
看来我的做法是 Array[i] 被当作 class ....
所以才能这样作!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.25.245.139
※ 编辑: STARGAZERs 来自: 114.25.245.139 (07/12 15:46)
1F:推 cjcat2266:原po应该是想要从qualified class name字串取得原本的 07/12 17:24
2F:→ cjcat2266:Class object,那就要用getDefinitionByName() 07/12 17:25