2012-09-13 35 views
1

我剛開始使用閃光燈,所以這可能是一件簡單的事情,所以請耐心等待。Flash as3在點擊時顯示特定的影片剪輯

我正在做一個項目,我有一張地圖,你可以點擊地圖上的地方,信息出現。我可以設法將每個button_btn鏈接到每個info_mc,但這會花費很長時間,所以我試圖創建一個讀取按鈕名稱並重定向到info_mc本身的函數。但是,由於名稱在從name_mc更改爲name_info時正在轉換爲字符串,因此不會重定向。這是代碼。

winterfell_info.visible = false; 

    map.winterfell_btn.doubleclickEnabled = true; 
    map.winterfell_btn.mouseChildren = doubleClickEnabled; 
    map.winterfell_btn.addEventListener(MouseEvent.DOUBLE_CLICK, show_clicked); 

    function show_clicked(e:MouseEvent):void{ 
     var get_name = e.currentTarget.name; 
     var open_info_string = get_name.slice(0,-3) + "info"; 
     //I've tried some things here but nothing is working for me. 
     var open_info = stage.getChildByName(open_info_string); 
     open_info.visible = true;  
    } 

任何幫助將非常感謝,謝謝。

如果你想知道是它的權利的遊戲地圖。

+0

您確定舞臺是「open_info_string」的父級嗎?因爲'getChildByName()'不是遞歸的。你確定你創建它時給了它「Winterfell_info」的名字嗎?因爲設置'.name'屬性與引用mc的變量命名不同。 – JcFx

回答

0

作爲第一個措施,除去「open_info_string」周圍的引號,並將該字符串中的大寫字母S更改爲正常的「s」,因爲Actionscript區分大小寫。

var open_info = stage.getChildByName(open_info_string); 

然後,如果它不會馬上開始工作,插入​​試圖達到影片剪輯,以找出是否被正確裁剪之前。

+0

謝謝,但仍然無法正常工作,「無法訪問空對象引用的屬性或方法」。和trace()給了我winterfell_info這正是我想要的 –

+0

看,我看你已經改變了一些問題。現在。您現在將「open_info_string」變量設置爲有用的內容,例如「help_info」,但您正在搜索名爲「open_info_string」的影片剪輯!你需要了解什麼是變量,什麼不是。如果你寫'stage.getChildByName(open_info_string);'你要求一個名稱包含在名爲「open_info_string」的變量中的對象,但是當你編寫'stage.getChildByName(「open_info_string」);'你在問對於名稱等於「open_info_string」的對象,這是一個常量。 – Vesper

+0

我現在明白了,我修好了,謝謝。但它仍然可以工作。 –

0

我做了類似的事情。我沒有時間去調整代碼,但如果你看看我在這裏做了什麼,我相信它會幫助你。我用我的視頻播放器上的對象的實例名稱創建一個數組,然後創建一個函數,使用switch case語句添加相應的事件偵聽器。在我看來,最簡單的方法是大規模完成此操作。

var buttons:Array = [clicky,pauseBtn,playBtn]; 

for (var i in buttons) 
{ 
    buttons[i].buttonMode = buttons[i].useHandCursor = true; 
    addEventListner(buttons[i]); 
} 

function addEventListner(movieClip) 
{ 
    movieClip.addEventListener(MouseEvent.CLICK, function(e){ 
    e.stopPropagation(); 
    switch (movieClip.name) 
    { 
    case "playBtn" : 
    youTubeHolder.videoPlayer.playVideo(); 
    videoController.playBtn.visible = false; 
    videoController.pauseBtn.visible = true; 
    break; 

    case "pauseBtn" : 
    youTubeHolder.videoPlayer.pauseVideo(); 
    videoController.playBtn.visible = true; 
    videoController.pauseBtn.visible = false; 
    break; 

    case "stopBtn" : 
    youTubeHolder.videoPlayer.seekTo(0); 
    youTubeHolder.videoPlayer.stopVideo(); 

    break; 

    default : 
    trace(movieClip.name+"is not a valid button"); 
    } 


    }); 
}