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

Actionscript 3 单击后将按钮设置为不可见,actionscript-3,flash,Actionscript 3,Flash,我试图在AS3中将一个按钮设置为不可见,但是当我离开框架并返回框架时,按钮再次可见。这是我为通信技术课制作的一款危险游戏 以下是我目前拥有的: a1.addEventListener(MouseEvent.CLICK, a1mouseClick); function a1mouseClick(mouse:MouseEvent) { a1.visible = false; gotoAndStop("A1"); trace("Going to A1"); } 但是,当使

我试图在AS3中将一个按钮设置为不可见,但是当我离开框架并返回框架时,按钮再次可见。这是我为通信技术课制作的一款危险游戏

以下是我目前拥有的:

a1.addEventListener(MouseEvent.CLICK, a1mouseClick); 

function a1mouseClick(mouse:MouseEvent) {
    a1.visible = false;
    gotoAndStop("A1");
    trace("Going to A1");
}
但是,当使用a1按钮返回到帧时,它再次可见


这是我当前的动画:

在时间线中移动时,flash player可以重新创建精灵、电影剪辑和文本字段,这样按钮就会再次显示出来。要防止重新创建,请将所有控件移动到不带关键帧的单独标高。如果需要关键帧,请尝试在所有关键帧中为该按钮设置相同的实例名称。

在时间轴中移动时,flash player可以重新创建精灵、电影剪辑和文本字段,使按钮再次可见。要防止重新创建,请将所有控件移动到不带关键帧的单独标高。如果需要关键帧,请尝试在所有关键帧中为此按钮设置相同的实例名称。

您缺少flash时间线和关键帧功能的一个基本方面。离开该帧后,该帧内容的舞台实例及其属性/状态将消失。返回到该帧时,将根据关键帧内容再次创建实例

我认为考虑到您当前的方法,最好的解决方案是将主板持久化到所有帧中。您可以通过为其创建一个层,并使其关键帧从第2帧延伸到第27帧来实现这一点。但是,您的下一个问题将是调整屏幕上所有元素的可见性,如果您不希望这些元素可见

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

main_board.a1.visible = false;
此外,还需要修改所有addEventListener行:

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

你对这个游戏的处理方法可以大大简化,但比我已经讨论的问题范围还要远

您缺少flash时间线和关键帧功能的一个基本方面。离开该帧后,该帧内容的舞台实例及其属性/状态将消失。返回到该帧时,将根据关键帧内容再次创建实例

我认为考虑到您当前的方法,最好的解决方案是将主板持久化到所有帧中。您可以通过为其创建一个层,并使其关键帧从第2帧延伸到第27帧来实现这一点。但是,您的下一个问题将是调整屏幕上所有元素的可见性,如果您不希望这些元素可见

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

main_board.a1.visible = false;
此外,还需要修改所有addEventListener行:

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

你对这个游戏的处理方法可以大大简化,但比我已经讨论的问题范围还要远

@fsbmain和@prototypic他们是对的


在时间线中移动时,flash player可以重新创建精灵、电影剪辑和文本字段,因此按钮将再次显示。要防止重新创建,请将所有控件移动到不带关键帧的单独标高。如果需要关键帧,请尝试在所有关键帧中为此按钮设置相同的实例名称

我正在查看您的项目,并提供了一个快速修复方案,您需要执行以下操作:

  • 在顶部创建一个新层,通过以下操作管理所有框架的一些可用操作:

    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;
    }
    
  • 每次要检查按钮的可见性时,必须调用
    checkVisibility()
    函数。例如,每次返回按钮列表时

  • 最后,每个按钮的事件处理程序必须如下所示:

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

  • 你可以在这里下载编辑过的文件

    @fsbmain和@prototypic他们是对的


    在时间线中移动时,flash player可以重新创建精灵、电影剪辑和文本字段,因此按钮将再次显示。要防止重新创建,请将所有控件移动到不带关键帧的单独标高。如果需要关键帧,请尝试在所有关键帧中为此按钮设置相同的实例名称

    我正在查看您的项目,并提供了一个快速修复方案,您需要执行以下操作:

  • 在顶部创建一个新层,通过以下操作管理所有框架的一些可用操作:

    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;
    }
    
  • 每次要检查按钮的可见性时,必须调用
    checkVisibility()
    函数。例如,每次返回按钮列表时

  • 最后,每个按钮的事件处理程序必须如下所示:

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

  • 您可以在此处下载编辑后的文件

    非常感谢。这是我第一次使用flash,所以我对它不在行。这是一个巨大的帮助:)非常感谢。这是我第一次使用flash,所以我对它不在行。这是一个巨大的帮助:)