2010-08-17 74 views
2

有多個動態放置在舞臺上的動畫片段。這些影片剪輯被編碼爲按鈕。我試圖弄清楚 - 當用戶點擊MovieClip時...找出用戶點擊Flash階段的哪個對象。如何在動態創建的Flash舞臺上獲取MovieClip的名稱?

內部功能toggleClick我把跟蹤聲明:

trace("movieClip Instance Name = " + e.target.name); 

在輸出窗口:

movieClip Instance Name = instance5 
movieClip Instance Name = instance12 
movieClip Instance Name = instance5 
movieClip Instance Name = instance32 
movieClip Instance Name = instance5 
movieClip Instance Name = instance59 

似乎不是得到一個名字被點擊的影片剪輯的方式。

是getChildByName()的方式嗎?如果是這樣,任何想法如何使用getChildByName()來獲取被點擊的MovieClip的名稱?

回答

7

添加一個按鈕到舞臺前,你其實可以將其命名爲

var myButton:MovieClip = new MovieClip(); 
    myButton.name = 'button1'; 

var myButton:MovieClip = new MyButton(); //if you assigned a class name to your MovieClip 
    myButton.name = 'button1'; 

與您例如,你可以做這樣的事情:

var comp:Comp = new Comp(); 
    var monitor:Monitor = new Monitor(); 

    addItemButton(comp, "comp" , {x:100, y:200}); 
    addItemButton(monitor, "monitor" , {x:30 , y:50}); 


    private function addItemButton(item:MovieClip , itemName:String , params:Object):void 
    { 
    item.addEventListener(MouseEvent.CLICK , clickHandler); 
    item.name = itemName; 

    // of course params is not necessary, just making a point of 
    // how to centralize your concerns 
    item.x = params.x; 
    items.y = params.y; 

    addChild(item); 
    } 

    private function clickHandler(event:MouseEvent):void 
    { 
    trace("button clicked:" + event.currentTarget.name); 
    } 
+0

感謝您向我展示可以命名動態加載的MovieClips。我相信這非常有用。我認爲唯一可以命名影片剪輯實例的方法是手動將MC從庫中拖放到舞臺上 - 並將其命名爲屬性面板。 – jc70 2010-08-21 22:42:16

2

在AS3中,當您創建MovieClip動態Flash時,會將它視爲只讀實例名稱,如您所見(例如,instance12)。找到哪個movieclip被點擊的最好方法是簡單地使用MouseEvent的currentTarget/target(請參閱這兩者之間的區別:http://www.wastedpotential.com/?p=10)。

你會使用它,像這樣:

var foo:MovieClip = new MovieClip(); 
foo.graphics.drawRect(0, 0, 100, 50); 
stage.addChild(foo); 
foo.addEventListener(MouseEvent.CLICK, clickHandler); 

var bar:MovieClip = new MovieClip(); 
bar.graphics.drawRect(0, 0, 100, 50); bar.y = 100; 
stage.addChild(bar); 
bar.addEventListener(MouseEvent.CLICK, clickHandler); 

//this function will set the x to 100 and the width to 50 of the clicked MovieClip 
function clickHandler(e:MouseEvent):void 
{ 
    e.currentTarget.x = 100; 
    e.currentTarget.width = 50; 
} 
+0

使用currentTarget很有幫助。我能夠在'連接對話區/框'中獲得我分配MovieClip的類名。 這個類名叫做Comp。 (MovieClip裏面是電腦的圖形,類名稱Comp。的原因) OUTPUT窗口顯示: MovieClip Instance Name = [object Comp] 看起來不錯,但我並非100%確定如何使用在我的下一步中名稱[對象比較]。我只想要Comp ...這個名字而不是[object Comp]。 – jc70 2010-08-18 01:50:31

+0

@crew:你可以說'e.target.name.substr(7)'頂部切掉一個'String'的前7個字符。 – Gunslinger47 2010-08-18 03:35:00

+0

使用getQualifiedClassName(http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/utils/package.html#getQualifiedClassName) – Obto 2010-08-18 05:14:33