如何动态命名实例

 for(var i:int=1;i<=maxX;i++){
        square=new SquareClass();
        square.name=["square"+String(i)+String(j)];
       square.x=this.x+square.width*(j-(maxY/2+0.5));
       addChild(square);

 

 

===============

for(i=0;i<10;i++){

var _mc:MovieClip=this.getChildByName("star_"+i) as MovieClip;
}
===
var a:Array=["欣赏图像","观赏网站","电子邮件联系","执行JavaScript"];
var b:Array=["images/potable014.jpg","http://blog.sina.com.cn","mailto:844249860@qq.com","javascript:alert('我会成功!')"];
for (var i=0; i<4; i++) {
        var _jb:Btn=new Btn();
                _jb.name=b[i];
        _jb.x=70+140*i;
        _jb.y=100;
        _jb.ming_btn.text=a[i];
        addChild(_jb).addEventListener(MouseEvent.CLICK,zhixing);
}
function zhixing(e:MouseEvent) {
        navigateToURL(new URLRequest(e.target.name),"_blank");
}
=============================================================
as3.0批量取库中元件(linkage)类
//库中有两个元件 Symbol1,Symbol2 设置linkage:Symbol1,Symbol2
import flash.utils.getDefinitionByName;
for (var i:Number=1; i<=2; i++) {
var classDefintion:Class = getDefinitionByName("Symbol"+i) as Class;
var mcTem:MovieClip=new classDefintion();
mcTem.x=i*20;
mcTem.y=i*20;
this.addChild(mcTem);
}
=================================
var mc:Array=new Array();
for(var i:int=0;i<5;i++)
{
mc[i]=new Sprite();
mc[i].width=100;
mc[i].height=100;
mc[i].name="mc"+i;
addChild(mc[i]);
mc[i].gotoAndPlay(2);
}
btn.addEventListener(MouseEvent.MOUSE_DOWN,btnclick);
function btnclick(event:MouseEvent):void{
for(var j:int=0;j<5;j++)
{
mc[j].gotoAndPlay(2);
}
}
楼主参考一下这个.
如果这些动态创建的mc是放在mcA里面,也是一样的,不需要加什么mcA.mc[i],直接mc[i]就可以了.
=========================================================

AS3动态获得类名及类的方法

Posted on 2009-08-02 11:39 ddw1997 阅读(515) 评论(0) 编辑 收藏

1.获得某个实例对象的类名:getQualifiedClassName (实例名字符串表达式);

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1 stage.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandle);
2 function mouseOverHandle(e:Event):void {
3     trace("over");
4     //   返回instance**之类的        
5     trace(e.target.name);
6     //返回元件名   
7     trace(getQualifiedClassName(e.target));
8 }

2.获得某个实例对象的类:constructor

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1 dynamic class A {}
2 trace(A.prototype.constructor);      // [class A]
3 trace(A.prototype.constructor == A); // true
4 var myA:A = new A();
5 trace(myA.constructor == A);         // true

3.根据类名获得类: getDefinitionByName(类名);

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1 package {
 2     import flash.display.DisplayObject;
 3     import flash.display.Sprite;
 4     import flash.utils.getDefinitionByName;
 5 
 6     public class GetDefinitionByNameExample extends Sprite {
 7         private var bgColor:uint = 0xFFCC00;
 8         private var size:uint = 80;
 9 
10         public function GetDefinitionByNameExample() {
11             var ClassReference:Class = getDefinitionByName("flash.display.Sprite") as Class;
12             var instance:Object = new ClassReference();
13             instance.graphics.beginFill(bgColor);
14             instance.graphics.drawRect(00, size, size);
15             instance.graphics.endFill();
16             addChild(DisplayObject(instance));
17         }
18     }
19 }

4.用得到的类实例化对象:一般中间要用一个无类型变量传递类,进行实例化;如:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1 var i=0
2 var c:*=getDefinitionByName(getQualifiedClassName ("MyClass"+i)); 
3 var myClass:*=new c();
4 

 

 

 

在AS3中,我们可以用getChildByName来获取一个元件,但是要注意返回的类型是DisplayObject,这样一旦我们的元件中有一些自定义的方法就不能使用了。

比如我有一个类Ball,Ball有一个方法move,那么我可以这样写:

var b:Ball=new Ball();

addChild(b);

b.move();//这样没问题

getChildByName(”b”).move();//这样编译时会报错

其原因应该就是getChildByName返回的类型是DisplayObject,而并不是Ball,所以无法调用Ball的方法。

如果这样写:

var c:Ball= getChildByName(”b”) as Ball;

c.move();

这样就没问题了,编译通过,可以调用Ball的方法。

 

下面是我自己的总结:

getChildByName方法是用于元件动态命名时的。例如:在场景中有一个元件,在属性面板中对其命名为cc,在对其操作时就可以写cc.y=XXX;而动态命名时,就如上面的例子,场景中本没有这个元件,用addChild将其放到场景中时再对其命名,这时要对这个元件进行操作就要用到getChildByName了,再举例如下:

var b:Ball=new Ball()

addChild(b)

b.name="mc1"

getChildByName("mc1").y=200

 

补充:

例如场景中有一元件mc1,现在用一个字符串来表示它,并且利用这段字符串来调用它的属性或方法:

var cc="mc1"

getChildByName(cc).XXX

这时如果是自定义的属性或方法的话,会报错,因为AS3认不出来被操作的对象是何类型的,这就需要我们来告诉它,有两种方法解决这个问题:

一、将getChildByName(cc)改成MovieClip(getChildByName(cc)),意思是先用getChildByName将cc这个字符串变成DisplayObject,然后再将它变为MovieClip,这时AS3认出它是一个MovieClip了,就可以访问它的属性和调用它的方法了。

二、将语句写成:

var cc:MovieClip=mc1

this["cc"].XXX

 

另外还有一种字符串的写法:

var cc=mc1.name

this["cc"].XXX

这里mc1.name必须是在属性面板里命名的,而不是mc1.name="XXX"命名的

[]在这里就是动态的意思,被操作的对象的类型是动态的,这样就可以绕过AS3的编译器了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值