【问题标题】:nonClickable buttons after loading same FLA 2nd time第二次加载相同的 FLA 后不可点击的按钮
【发布时间】:2014-01-12 12:26:54
【问题描述】:

基本上我试图制作一个 FLA,如果我点击一个按钮并关闭 FLA,下次我加载相同的 FLA 时,之前点击过的按钮现在的 alpha 为 0.5,并且不可点击。

目前我只有创建按钮和保存数据的逻辑:

    private var savedData:SharedObject = SharedObject.getLocal("sharedStorage10");
    private var buttonInfoArr:Array = [];

    public function Main()
    {

        for (var i:int = 0; i < 4; i++)
        {
            var myImage_mc:MovieClip = new MovieClip();

            myImage_mc.graphics.beginFill( 0xFFFFFF * Math.random() );
            myImage_mc.graphics.drawRect(0,0,100,100);
            myImage_mc.graphics.endFill();

            myImage_mc.x = 50 + i * (myImage_mc.width + 10);
            myImage_mc.y = 100;
            myImage_mc.name = "myImage_mc" + i
            this.addChild(myImage_mc);

            myImage_mc.mouseEnabled = true;
            myImage_mc.buttonMode = true;
            myImage_mc.addEventListener(MouseEvent.CLICK, onClick);
        }
    }

    private function onClick(ev:MouseEvent):void
    {
        var thisButton:MovieClip = ev.currentTarget as MovieClip

            trace(thisButton.name)

            thisButton.alpha = 0.5
            thisButton.buttonMode = false;
            thisButton.removeEventListener(MouseEvent.CLICK, onClick);

            buttonInfoArr.push( thisButton.name );
            savedData.data.myArray = buttonInfoArr;
    }

但我不知道如何加载/使用数据并使按钮(之前已单击)以 0.5 的 alpha 开头且没有 EventListener(MouseEvent.CLICK,点击)

PS:不使用字典可以吗,因为我还没有掌握它。

_编辑__


以更详细的方式表示我的问题:

所以我创建了一个游戏,在其中我收集代表金钱的物品。在游戏中死后,我进入 商店 类,我可以在其中根据我拥有的钱购买不同的物品。 所以可以说死后我有足够的钱来获得item1和item2。所以我点击button1(代表item1)和button2(代表item2)(当点击他们的alpha 0.5) 并重新开始游戏。好吧,现在我有 1 条生命,我得到更多的钱。但突然间,我突然觉得我内心深处有些奇怪,有些东西我以前从未有过的感觉->饥饿,

我关闭了电脑(因为我爱地球)并尽可能快地跑到最近的商店。

让我们说 item1 是:+1life 并且 item2 是:从对象中获得更多的钱

在我满足了我最初的需求后,我强烈地想要再次玩我那个很棒的游戏。但是当我开始游戏时,我开始看到一些奇怪的事情:我似乎没有一条生命并且我也没有获得更多的钱,只是为了确保我没有产生幻觉(或者我不记得我上次的生活)我是故意死的,所以商店菜单会显示。所以现在我看到的让我伤心 -> button1 和 button2 处于活动状态并且 alpha 为 1(这意味着游戏认为它们从未被购买/点击,我这辈子从来没有玩过这个游戏) 所以我发疯了(因为之前的所有比赛都是徒劳的,我必须重新开始)。

冷静下来后,我决定改变我的生活。第一个重大变化是在游戏中添加了一些代码。更具体地说:一种保存我买的物品的方法,所以当我关闭游戏并重新开始时,我看到的东西会给我的生活带来乐趣->:我仍然有我上次买的物品。

长话短说: 当我单击一个按钮(它将其 alpha 更改为 0.5)并关闭 FLA 时,我该如何做到这一点, 每当我打开同一个 FLA 时,我之前单击的按钮将显示为现在已单击(它的 alpha 将为 0.5)

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:

    发生的事情是正常的。所有变量都存储在 RAM 中,即临时存储器。您的按钮状态也是变量。每当任何程序关闭时,它在 RAM 中的所有内容都会被删除,因此变量会被清除。这适用于所有程序,所有编程语言。绝对没有例外。

    很简单,您需要在硬盘驱动器(即“永久”内存)上创建一个可以长期存储所有这些数据的文件。

    如果您要为互联网创建游戏,则需要使用 SharedObjects(也称为 cookie)来存储这些数据。

    如果您正在创建要安装在计算机或移动设备上的游戏,您需要将数据存储在文件中。我推荐XML files,因为它们是迄今为止最容易使用的。

    我不会在这里讨论,因为这些是讲座,而不是 SO 答案。请参阅上面的链接以开始使用。

    【讨论】:

      【解决方案2】:

      我不明白你到底想做什么。但这是我的简单方法。

      // this is basically saved your latest clip we will control this if user click this button then we will be blocked
      
      private var lastClickedButton:MovieClip;
      
      private function onClick(ev:MouseEvent):void
      {
              var thisButton:MovieClip = ev.currentTarget as MovieClip
      
                  trace(thisButton.name)
      
                  thisButton.alpha = 0.5
                  thisButton.buttonMode = false;
                  thisButton.removeEventListener(MouseEvent.CLICK, onClick);
      
                  buttonInfoArr.push( thisButton.name );
                  savedData.data.myArray = buttonInfoArr;
      
                  // set the lastclicked button
                  lastClickedButton = thisButton;
      
                  // save this savedData sharedObject
                  savedData.data.lastClickedItem = lastClickedButton;
      }
      
      addEventListener(Event.ENTER_FRAME, loop)
      {
          if(savedData.data.lastClickedItem)
          {
              // do something here.
              lastClickedButton.alpha = 0.5;
              lastClickedButton.mouseEnabled=false;
              // clear your sharedobject
              savedData.flush();
          } 
      }
      

      我希望这会对你有所帮助。祝你好运……

      【讨论】:

      • 好吧,我不明白。为什么我需要一个 Enter_Frame 函数,而我只需要查看是否在游戏开始时单击了按钮(这意味着加载主类时)
      猜你喜欢
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 2018-03-26
      • 1970-01-01
      • 2016-11-01
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多