簡體   English   中英

將ID添加到新創建的對象as3

[英]Adding ID to a new created object as3

我有一個問題,我創建了一個新孩子,一個圓圈,但是我不知道如何給它提供一個ID,因此即使我移動它,我也可以隨時訪問它,問題是我的函數new_sond創建了多個對象,所以我想在功能中為它們提供ID,例如對於1對象“ 1”為第二個“ 2”,依此類推,我不知道該怎么做,我嘗試搜索但沒有找到任何東西,由於我創建了更多具有相同名稱的對象,因此trace(name)不會有用。

這是創建對象的代碼:

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,以便即使移動對象也可以對其進行檢查。 非常感謝你 !!!!

您可以在Sprite類上設置name屬性。 此屬性繼承自DIsplayObject類 這是文檔中屬性的摘要。

該屬性是一個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”字段,無論您追求什么目的。

或者,您可以將對象放置在數組中,並依靠它們的位置作為ID。

我只是偶然發現了這個問題,並認為有必要指出AS3還有一個內置實用程序,用於為對象生成唯一名稱

NameUtil.createUniqueName

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM