1

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

这是创建对象的代码:

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,以便即使我移动对象也可以检查它。非常感谢 !!!!

4

3 回答 3

2

您可以在Sprite 类name上设置属性。此属性继承自DISplayObject 类。这是文档中的属性摘要。

该属性是一个字符串,您可以从 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”字段以用于您寻求的任何目的。

于 2013-08-03T12:25:42.017 回答
0

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

于 2014-01-28T04:03:54.060 回答
0

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

NameUtil.createUniqueName

于 2014-03-03T21:47:52.293 回答