单击后将按钮设置为不可见

时间:2013-01-01 21:15:40

标签: actionscript-3 flash

我正在尝试将一个按钮设置为在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

3 个答案:

答案 0 :(得分:4)

在时间轴中移动时,Flash播放器可以重新创建精灵,影片剪辑和文本字段,因此您的按钮会再次显示。为了防止娱乐,将所有控件移动到没有关键帧的单独级别。如果需要关键帧,请尝试在所有关键帧中为此按钮设置相同的实例名称。

答案 1 :(得分:1)

您缺少Flash时间轴和关键帧功能的基本方面。一旦你离开那个框架,该框架内容的阶段实例及其属性/状态就会消失。当您返回到该帧时,将根据关键帧内容再次创建实例。

我认为,根据您当前的方法,最佳解决方案是将主板在所有帧中保持不变。你可以通过为它创建一个图层,让它的关键帧从第2帧扩展到第27帧。但是,当你不希望它们可见时,你的下一个问题是调整该屏幕上所有元素的可见性。

我的建议是将该屏幕的所有元素放入其自己的movieclip符号中,并将该movieclip及其所有代码添加到您创建的新图层中。例如,您可以将该实例命名为main_board,因此您可以使用main_board.visible属性修改它的可见性。如果您确实选择了该解决方案,则需要修改该帧上的所有代码以使用该实例名称,即:

main_board.a1.visible = false;

此外,您还需要修改所有addEventListener行:

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

你对这个游戏的方法可以大大简化,但是甚至超出了我已经消失的范围!

答案 2 :(得分: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");
    }
    
  4. 您可以在此处下载已编辑的文件http://cl.ly/Lt6X