【问题标题】:AS3: Refresh a FunctionAS3:刷新函数
【发布时间】:2014-06-17 18:58:54
【问题描述】:

在 Action Script 3 中有没有刷新函数的方法?我想我正在寻找的是当我切换屏幕以重置或刷新功能时,该功能也绑定到一个数组中,所以我不知道这是否会影响任何事情。程序是这样工作的,有 59 个数字,用户选择了 5。所以这是我正在使用的代码和我试图重置的代码。

    var pickFive:Array = new Array (5);
    var m_iNextElement:int = 0;
    var b1:TextField = new TextField();
    var b2:TextField = new TextField();
    var b3:TextField = new TextField();
    var b4:TextField = new TextField();
    var b5:TextField = new TextField();

    var myFormat:TextFormat = new TextFormat();
    myFormat.size = 45;

    Game.board.btn_1.addEventListener(MouseEvent.CLICK, btn1);

//Trying to reset this
    function btn1(event:MouseEvent):void{
        if(m_iNextElement <= 4){
        Game.board.btn_1.gotoAndStop(2);
        pickFive[m_iNextElement] = 1;
        m_iNextElement++;

        b1.defaultTextFormat = myFormat;
        b1.text = pickFive[0];
        b1.x = 510;
        b1.y = 103;
        addChild(b1);

        b2.defaultTextFormat = myFormat;
        b2.text = pickFive[1];
        b2.x = 593;
        b2.y = 103;
        addChild(b2);

        b3.defaultTextFormat = myFormat;
        b3.text = pickFive[2];
        b3.x = 673;
        b3.y = 103;
        addChild(b3);

        b4.defaultTextFormat = myFormat;
        b4.text = pickFive[3];
        b4.x = 760;
        b4.y = 103;
        addChild(b4);

        b5.defaultTextFormat = myFormat;
        b5.text = pickFive[4];
        b5.x = 840;
        b5.y = 103;
        addChild(b5);
        }
    }

【问题讨论】:

  • 这太模糊了。请花点时间尝试并详细说明您的应用程序的工作原理、您尝试过的内容、您当前使用的任何适用代码以及您遇到的具体问题。
  • 刚刚更新,希望这可以解决一些问题
  • 当你说“重置”的时候,你的意思是你想拿走你在点击事件中所做的所有文本框吗?我仍然很难理解你真正想要完成的事情。
  • 目前我的数字消失了。问题是方框停留在第 2 帧上,而数组仍在存储选定的数字。
  • 那么,当m_iNextElement > 4 时,您希望 b1,b2,b3,b4,b5 消失,pickFive 数组为空?

标签: actionscript-3 function reset


【解决方案1】:

要进行重置,您只需要创建一个重置函数。也就是说,一个函数包含“根据需要调整各种变量直到被认为是重置”的指令。然后,每当您需要发生这种情况时,您只需触发该函数的执行,例如:do_Reset(); 确保 do_Reset 不是基于事件的函数,例如:function do_Rest (event:MouseEvent):void 如果您尝试手动执行它,它将不起作用,因为只有鼠标如果这样设置,事件可以触发该功能..

无论如何,听起来您实际上并不是在寻找大多数人称之为重置的东西,而是更多被称为重新运行的东西。 Reset 意味着你什么都没有开始,事情发生了,Reset 是像一个新的开始一样再次回到空白,Re-run 是事情正在发生并且你想要一些东西重新发生。

所以到一个可能的解决方案..

    var pickFive:Array = new Array(5);
    var m_iNextElement:int = 0;
    var b1:TextField = new TextField();
    var b2:TextField = new TextField();
    var b3:TextField = new TextField();
    var b4:TextField = new TextField();
    var b5:TextField = new TextField();

    var myFormat:TextFormat = new TextFormat();
    myFormat.size = 45;

    Game.board.btn_1.addEventListener(MouseEvent.CLICK, btn1);

    function btn1(event:MouseEvent):void
    {
        trace(" *** Clicked btn1 : Setting up game... ");

        Game.board.btn_1.gotoAndStop(2);

        setup_Board(); //to manually run that function
    }

    //Trying to reset this...
    function setup_Board():void
    {
        if (m_iNextElement <= 4)
        {

            pickFive[m_iNextElement] = 1;
            m_iNextElement++;

            b1.defaultTextFormat = myFormat;
            b1.text = pickFive[0];
            b1.x = 510; b1.y = 103; addChild(b1);

            b2.defaultTextFormat = myFormat;
            b2.text = pickFive[1];
            b2.x = 593; b2.y = 103; addChild(b2);

            b3.defaultTextFormat = myFormat;
            b3.text = pickFive[2];
            b3.x = 673; b3.y = 103; addChild(b3);

            b4.defaultTextFormat = myFormat;
            b4.text = pickFive[3];
            b4.x = 760; b4.y = 103; addChild(b4);

            b5.defaultTextFormat = myFormat;
            b5.text = pickFive[4];
            b5.x = 840; b5.y = 103; addChild(b5);
        }
    }

    function Game_Over():void
    {
        trace(" *** Game Over : Re-set game for new try... ");

        Game.board.btn_1.gotoAndStop(1);

        reset_Board(); //to manually run that function
    }

    function reset_Board():void
    {
        b1.text = b2.text = b3.text = b4.text = b5.text = "";

        removeChild(b1); removeChild(b2); removeChild(b3);
        removeChild(b4); removeChild(b5);

        trace(" *** Re-set complete... ");

        Game.board.btn_1.addEventListener(MouseEvent.CLICK, btn1);

        //// Or manual function re-run without waiting for above mouse click
        //setup_Board();
    }

此外,您还需要一个游戏结束功能来处理清理问题。这可以是Mouse_EventTimer_Event(例如:显示带有“restart”的MClip,并且它的点击监听器应该针对我包含的Game Over 功能。或者计时器只是手动运行@987654326 @经过一定时间倒计时。

否则只是多次重新运行会导致内存使用量增加,并且通常会降低系统速度。考虑一下您的鼠标单击,它只会不断添加 5 个电影剪辑,单击 10 次后,您在屏幕上和 RAM 内存某处有 50 个 MClips,但是在单击 X-num 小时后,您会指责 Adob​​e 是那些无法“正确”获得 Flash 的糟糕程序员没有它杀死你的电脑。并威胁要将您的技能带到更好的系统,例如 HTML 或 MS Publisher(..只是开玩笑)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-25
    • 2012-06-29
    • 2012-03-07
    • 2011-06-21
    • 2017-08-05
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多