2013-08-03 57 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。