2014-02-28 52 views
0

我的代碼是:AS3 |如何使用var作爲名字?

for (var i:int=1; i <= 12; i++) { 
    MovieClip(getChildByName('mouse' + '_' + i)).addEventListener(MouseEvent.CLICK, chooseTool); 
} 

function chooseTool(e:MouseEvent):void { 
    Mouse.hide(); 

    var cursor:MovieClip = new "here is e.target.name"(); 
    addChild(cursor); 

    stage.addEventListener(MouseEvent.MOUSE_MOVE, follow); 
} 

function follow(e:MouseEvent):void { 
    cursor.x=mouseX; 
    cursor.y=mouseY; 
} 

如何使用 「e.target.name」 的名字? 應該變成類似於:
1)單擊帶名稱的按鈕mouse_4​​
2)功能chooseTool使用名稱mouse_4​​()創建新的MovieClip;
例如:var cursor:MovieClip = new mouse_4();

回答

1

您可以通過使用getDefinitionByNameAdobe documentation: getDefinitionByName)做

for (var i:int=1; i <= 12; i++) { 
    MovieClip(getChildByName('mouse' + '_' + i)).addEventListener(MouseEvent.CLICK, chooseTool); 
} 

function chooseTool(e:MouseEvent):void { 
    Mouse.hide(); 

    var o:Object = getDefinitionByName(e.target.name); 
     //^Gets a reference to the class object based on a string 

    if(o == null) throw new Error("Unable to find class " + e.target.name); 

    var c:Class = o as Class; 
    var cursor:MovieClip = new c() as MovieClip; 
    addChild(cursor); 

    stage.addEventListener(MouseEvent.MOUSE_MOVE, follow); 
} 

function follow(e:MouseEvent):void { 
    cursor.x=mouseX; 
    cursor.y=mouseY; 
} 

但這種感覺做的很厲害結構化的方法。相反,我會使用工廠方法(Factory pattern on Wikipedia

for (var i:int=1; i <= 12; i++) { 
    MovieClip(getChildByName('mouse' + '_' + i)).addEventListener(MouseEvent.CLICK, chooseTool); 
} 

function chooseTool(e:MouseEvent):void { 
    Mouse.hide(); 

    var cursor:MovieClip = getCursor(e.target); 
    addChild(cursor); 

    stage.addEventListener(MouseEvent.MOUSE_MOVE, follow); 
} 

function follow(e:MouseEvent):void { 
    cursor.x=mouseX; 
    cursor.y=mouseY; 
} 

function getCursor(target:MovieClip):MovieClip 
{ 
    switch(target.name) 
    { 
     case "cursor_4": 
      return new cursor_4(); 

     default: 
      return new default_mouse(); 
    } 
} 
1

你不能這樣做。這不是真的,一個名字將是一個新的類/類型。解決方案是擴展MovieClip並將該名稱作爲參數傳遞。我不知道你想達到什麼目標,但這是一個很好的開始。

class MyClip extends MovieClip 
{ 
    public var name:String=""; 
    public function MyClip(name:String) 
    { 
     super(); 
    this.name=name; 
    } 
} 
} 

該代碼看起來像這樣,你可以在這個類中添加所有與此類型相關的邏輯。

1

你不能像這個新的「e.target.name」(); 但是,如果你想採取目標的參考,你可以試試這個。

var cursor:MovieClip = e.target as MovieClip;

您無法修改遊標的名稱屬性。