`

如何动态命名实例

 
阅读更多

 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的编译器了

分享到:
评论

相关推荐

    SQL数据库默认实例与命名实例的区别

    - **优点**:1434端口用于动态查找命名实例的TCP/IP端口,这使得客户端能够自动发现并连接到正确的端口。 - **注意**:如果需要,也可以通过SQL Server配置管理器为每个命名实例设置自定义的TCP/IP端口。 #### ...

    PHP命名空间的使用,PHP命名空间实例

    这里,我们导入了`MyProject\Library`命名空间下的`MyClass`,并创建了一个实例。 2. 静态调用和导入:对于静态成员,可以使用`::`操作符进行调用,但同样需要导入对应的命名空间。 ```php use MyProject\Library\...

    命名管道实例

    在本实例中,我们关注的是使用C++语言来创建和利用命名管道进行通信。这个压缩包包含了两个关键文件:“CreateNamePipe”和“NamePipe”,分别代表了服务器端(创建命名管道)和客户端(连接并使用命名管道)的代码...

    as2.0内置类创建实例的命名技巧

    ### AS2.0 内置类创建实例的命名技巧详解 #### 一、引言 在ActionScript 2.0(简称AS2.0)中,为了提高代码的可读性和可维护性,开发者们经常采用一些约定俗成的命名规则来对变量和实例进行命名。这种做法不仅能够...

    命名管道实例 命名管道

    在本实例中,我们将深入探讨命名管道的工作原理、如何创建和使用命名管道,以及在实际开发中的应用。 首先,我们需要理解命名管道的核心概念。命名管道具有一个唯一的名称,使得其他进程可以通过这个名称找到并连接...

    用命名互斥量限制应用运行唯一实例

    在探讨如何利用命名互斥量(Mutex)来确保应用程序在同一时间内仅能运行一个实例之前,我们首先需要了解一些基本概念。 ### 命名互斥量(Mutex)简介 互斥量是一种同步对象,用于控制多个线程对共享资源或临界区的访问...

    利用Type动态创建类实例(C#反射)可以演变抽象工厂

    在给定的标题“利用Type动态创建类实例(C#反射)可以演变抽象工厂”中,我们可以看到两个主要概念:Type和抽象工厂模式。下面将详细解释这两个知识点以及它们如何相互关联。 1. Type: C#中的Type类是System....

    C# FramwWork4.0 后的命名通道实例

    在本实例中,我们将探讨如何在C#中实现命名通道,以及如何在控制台应用程序和Windows Forms(WinForms)应用程序中进行测试。 命名通道的核心概念包括通道两端的角色:服务器(Server)和客户端(Client)。服务器...

    c#namepipe实例,c#命名管道实例

    命名管道是Windows操作系统提供的一种进程间通信(IPC)机制,允许不同进程之间交换数据。在C#编程中,我们可以利用.NET Framework提供的System.IO.Pipes命名空间来创建和使用命名管道。下面将详细介绍C#中使用命名...

    命名管道实例教程(源码 VS2005)

    在这个实例教程中,我们将深入探讨如何在Visual Studio 2005环境下使用C#语言创建和使用命名管道。 首先,让我们了解命名管道的基本概念。命名管道具有方向性,可以是单向或双向通信。一个进程作为服务器创建命名...

    java变量命名心得

    下面我们将通过一个实例来展示局部变量和实例变量的区别,并总结 java 变量命名的几个典型问题。 首先,让我们来看一下局部变量和实例变量的区别。局部变量是指在方法内部定义的变量,它的作用域仅限于该方法内部。...

    C# NamedPipe命名管道实例.zip

    本项目“C# NamedPipe命名管道实例”旨在演示如何利用C#来创建和使用命名管道,实现两个客户端之间的消息传递。 命名管道是一种高效的 IPC(Inter-Process Communication)机制,它允许多个进程在同一台计算机上...

    命名管道服务端,客户端通信实例

    通过学习这个实例,开发者不仅可以掌握命名管道的基本用法,还能了解到如何处理连接、读写数据以及错误处理等问题。这对于提高开发效率,特别是在设计分布式系统或者需要进程间通信的场景中,具有重要的实践意义。

    进程间通过命名管道通信实例

    在这个“进程间通过命名管道通信实例”中,开发者使用Visual Studio 2010作为开发环境,创建了一个简单的示例来演示如何实现这个功能。作为一个初学者的实践项目,这个实例对理解命名管道的工作原理非常有帮助。 ...

    C#命名空间实例附CS代码

    命名空间在多个面对对象的语言中有应用,例如JAVA,C ,C#。本文主要记录了在C#中如何调用不同命名空间的public class。 如果说类是对属性和方法的封装,那么命名空间就是对各个类的进一步封装。在同一命名空间中,...

    CORBA命名服务编程实例C++(SSD8Exercise5)

    **CORBA命名服务编程实例C++(SSD8Exercise5)** **一、CORBA基础** CORBA(Common Object Request Broker Architecture,公共对象请求代理架构)是一种标准的分布式计算框架,它允许不同操作系统、网络环境下的对象...

    js实例大全 js实例

    模块系统(如CommonJS、ES6模块)则用于组织代码,避免命名冲突和提高可维护性。实例中可能包含函数定义、调用、参数传递以及模块导入导出的示例。 三、对象与原型链 JavaScript的对象是键值对的集合,可以通过构造...

    sqlserver2008R2应用添加实例步骤

    - 为了方便后期管理,建议根据实际情况命名实例,例如使用店铺名称的拼音或其他易于识别的方式。 **步骤5:选择身份验证模式** - 根据需求选择混合模式或Windows身份验证模式。 - 混合模式允许使用SQL Server登录...

    c#命名管道发送接收消息实例

    在这个"C#命名管道发送接收消息实例"中,我们将深入探讨如何使用C#实现命名管道通信,以及相关的关键知识点。 首先,我们要理解什么是命名管道。命名管道是Windows操作系统提供的一个高级通信机制,它允许在同一台...

Global site tag (gtag.js) - Google Analytics