2013-08-03 58 views
1

我收到了一个问题,我创建了一个新的孩子,一个圆圈,但我不知道如何给它一个ID,所以我可以随时访问它,即使我移动它,问题是我的功能new_sond创建超过1个对象,所以我想给他们在功能的ID例如1对象“1”为第二个“2”等,我没有任何想法如何做到这一点,我试图寻找,但没有找到任何东西,跟踪(名称)becouse我创建具有相同名称的多个对象不会像有用...将ID添加到新创建的对象as3

这里是一个用于创建对象的代码:

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给每个创建的对象,所以我可以检查它,即使我移动的对象。 非常感谢你!

+0

为什么你用相同的名字创建对象的唯一名称效用?你的代码似乎只能创建多达9个对象,并且每次增加'i'。它甚至不设置'name'属性。 id [i] = i;'的目的究竟是什么?对我来说,它仍然听起来像你应该继承Sprite类并创建你自己的属性来跟踪。你是否想要创建自己的唯一ID以及为什么'name'不满足这个要求? –

回答

2

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

的属性是一个字符串,并设置或从它的setter /吸气实现中的DisplayObject检索:

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

此属性是ActionScript 3.0中的一部分,可在运行时版本开始,AIR 1.0,闪光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); 
} 

如果这不适合你,你总是可以创建自己的类,它是一个子类的雪碧,并添加自己的属性来跟踪你追求什么目的,“ID”字段。

0

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