怎么动态命名实例
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(0, 0, 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的编译器了