将ID添加到新创建的对象as3

时间:2013-08-03 11:50:02

标签: actionscript-3 actionscript

我有一个问题,我创建了一个新的孩子,一个圆圈,但我不知道我怎么能给它一个ID,所以我可以随时访问它,即使我移动它,问题是我的功能new_sond创建超过1个对象,所以我想给它们在函数中的ID,例如对于第2个“2”的1对象“1”等等,我不知道怎么做,我试图搜索但是没有找到任何东西,跟踪(名称)不会有用,因为我创建了更多具有相同名称的对象...

这是创建对象的代码:

function new_sond(event:MouseEvent):void
{
    if (i<9)
    {
    i++;
    id[i]=i;
    var btn:Sprite = new Sprite();  
    btn.graphics.beginFill(0x0066FF, 1);
    btn.graphics.drawCircle(400, 300, 25);
    btn.graphics.endFill();
    var textField = new TextField();
    textField.mouseEnabled=false;
    textField.text = i;
    textField.width = 10; 
    textField.height = 17;
    textField.x = 395; // center it horizontally
    textField.y = 292; // center it vertically
    cx[i]=textField.x;
    cy[i]=textField.y;
    btn.addChild(textField);
    this.addChild(btn);
    }
}

这是移动对象的代码:

this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownH);
this.addEventListener(MouseEvent.MOUSE_UP, mouseUpH);
function mouseDownH(evt:MouseEvent):void {
    var object = evt.target;
    object.startDrag();
}

function mouseUpH(evt:MouseEvent):void {
    var obj = evt.target;
        obj.stopDrag();
} 

问题是如何为每个创建的对象提供ID,以便即使我移动对象也可以检查它。 非常感谢!!!!

3 个答案:

答案 0 :(得分:2)

您可以在Sprite class上设置name属性。此属性继承自DIsplayObject class。以下是文档中的属性摘要。

该属性是一个String,您可以在DisplayObject中的setter / getter实现中设置或检索它:

public function get name():String
public function set name(value:String):void

此属性是ActionScript 3.0的一部分,在从AIR 1.0,Flash Player 9,Flash Lite 4开始的运行时版本中可用(这意味着它也可以在更高版本中使用)。

虽然可以抛出IllegalOperationError。如果您尝试通过Flash创作工具在放置在时间轴上的对象上设置属性,则会抛出此内容。

以下是DisplayObject#name属性文档中给出的示例。该示例创建了两个Sprite对象,并在单击它们时跟踪它们的名称。

 import flash.display.Sprite;
 import flash.events.MouseEvent;

 var circle1:Sprite = new Sprite();
 circle1.graphics.beginFill(0xFF0000);
 circle1.graphics.drawCircle(40, 40, 40);
 circle1.name = "circle1";
 addChild(circle1);
 circle1.addEventListener(MouseEvent.CLICK, traceName);

 var circle2:Sprite = new Sprite();
 circle2.graphics.beginFill(0x0000FF); 
 circle2.graphics.drawCircle(140, 40, 40);
 circle2.name = "circle2";
 addChild(circle2);
 circle2.addEventListener(MouseEvent.CLICK, traceName);

 function traceName(event:MouseEvent):void {
     trace(event.target.name);
 }

如果这对您不起作用,您可以随时创建自己的类,该类是Sprite的子类,并添加您自己的属性以跟踪“id”字段,无论您寻求什么目的。

答案 1 :(得分:0)

或者你可以把你的对象放在一个数组中,并依赖它们的数组位置作为Id。

答案 2 :(得分:0)

我只是偶然发现了这个问题并认为有必要指出AS3还有一个用于为对象生成唯一名称的内置实用程序

NameUtil.createUniqueName