2013-01-01 71 views
0

我想設置一個按鈕在AS3中不可見,但是當我離開框架並回到它時,該按鈕再次可見。這是我爲通用技術課製作的一個危險遊戲。設置一個按鈕隱藏一次點擊

這是我目前有:

a1.addEventListener(MouseEvent.CLICK, a1mouseClick); 

function a1mouseClick(mouse:MouseEvent) { 
    a1.visible = false; 
    gotoAndStop("A1"); 
    trace("Going to A1"); 
} 

然而,當它回來與A1按鈕,它是再次可見的框架。

這裏是我當前的動畫:https://dl.dropbox.com/u/23938245/jeporady.fla

回答

1

@fsbmain和@prototypical他們是對的。

在時間軸上移動時,Flash播放器可以重新創建精靈,影片剪輯和文本字段,以便您的按鈕再次可見。爲了防止重新創建,請將所有控件移至不含關鍵幀的級別。如果需要關鍵幀,請嘗試在所有關鍵幀中爲此按鈕設置相同的實例名稱。

我是看着你的項目,並提供快速修復,你需要做到以下幾點:

  1. 創建在上面新建一個圖層來管理一些操作可獲取的用於所有幀以下操作:

    import flash.display.DisplayObject; 
    
    // Manages the buttons visible state 
    var buttonsStates:Object = { 
        "a1":true, "b1":true, "c1":true, "d1":true, "e1":true, 
        "a2":true, "b2":true, "c2":true, "d2":true, "e2":true, 
        "a3":true, "b3":true, "c3":true, "d3":true, "e3":true, 
        "a4":true, "b4":true, "c4":true, "d4":true, "e4":true, 
        "a5":true, "b5":true, "c5":true, "d5":true, "e5":true 
    }; 
    
    // Checks the buttons visibility 
    function checkVisibility() { 
        for (var buttonName:String in buttonsStates) 
        { 
         var child:DisplayObject = this.getChildByName(buttonName); 
         child.visible = buttonsStates[buttonName]; 
        } 
    } 
    
    // Saves the visible satatus to false 
    function setVisibilityToFalse(target:*) { 
        buttonsStates[target.name] = false; 
        target.visible = false; 
    } 
    
  2. 要檢查按鈕的知名度,你必須調用checkVisibility()函數每次。例如,每次你回到按鈕列表。

  3. 最後爲每個按鈕的事件處理程序必須是這樣的:

    function a1mouseClick(mouse:MouseEvent) { 
        setVisibilityToFalse(mouse.currentTarget); // Saves the visible state to false 
        gotoAndStop("A1"); 
        trace("Going to A1"); 
    } 
    

您可以在這裏下載編輯的文件http://cl.ly/Lt6X

+0

非常感謝。這是我第一次使用閃光燈,所以我不會贊成。這是一個巨大的幫助:) –

4

雖然通過移動時間軸Flash Player可以重現精靈,影片剪輯和文本字段,所以你的按鈕將再次出現明顯的。爲了防止重新創建,請將所有控件移至不含關鍵幀的級別。如果需要關鍵幀,請嘗試在所有關鍵幀中爲此按鈕設置相同的實例名稱。

1

您錯過了Flash時間軸和關鍵幀功能的基本方面。一旦你離開那個框架,那個框架內容的階段實例和它的屬性/狀態就消失了。當您返回到該框架時,將根據關鍵幀內容再次創建該實例。

我認爲考慮到你目前的做法,最好的解決方案是讓主板在所有幀中保持不變。你可以通過爲它創建一個圖層,並使其從第2幀到第27幀的關鍵幀延伸。但是,當你不希望它們可見時,下一個問題將調整該屏幕上所有元素的可見性。

我的建議是將該屏幕的所有元素放入它自己的movieclip符號中,並將該movieclip以及它的所有偵聽器代碼添加到您創建的這個新圖層中。例如,您可以命名該實例 - main_board,因此您可以使用main_board.visible屬性修改其可見性。如果你沒有選擇的解決方案,你將需要修改框架上的所有代碼使用此實例的名稱,以及即:

main_board.a1.visible = false; 

此外,你需要修改你的addEventListener線以及:

main_board.a1.addEventListener(MouseEvent.CLICK, a1mouseClick); 

你對這個遊戲的方法可以大大簡化,但甚至超出了這個問題的範圍,我已經走了!