第二次加载相同FLA后的nonClickable按钮

时间:2014-01-11 12:09:04

标签: actionscript-3

基本上我试图创建一个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;
    }

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

PS:如果不使用词典就可以完成,因为我还没有理解它。

_ 修改 __


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

所以即时创建一个我收集代表金钱的物品的游戏。我在游戏中死后进入商店类,我可以根据我的钱购买不同的商品。 所以,让我们说在死后我有足够的钱来获得 item1 item2 。所以我点击 button1 (代表item1)和 button2 (代表item2)(当点击他们的alpha到达时0.5)然后再次开始游戏。所以现在我已经 1生活更多我得到更多的钱。但是我突然间无处不在地感觉到一些奇怪的东西在我身上,某事我从未感受过 - &gt;饥饿,

我关闭了PC(因为我喜欢地球)并且尽可能快地跑到最近的商店。

让我们说item1是:+ 1life而item2是:从对象中获取更多钱

在我满足了我的原始需求后,我感到强烈的冲动再次发挥我的那场精彩游戏。但是当我开始游戏时,我开始看到一些奇怪的事情:似乎我没有一个人生活而且我也没有得到更多的钱而且只是为了确保我不是幻觉(或者我没有记住我上次的生活)我故意死,所以商店菜单显示。所以现在我看到的让我难过 - &gt; button1 button2 处于有效状态且alpha为1(这意味着游戏认为他们从未被购买/点击过,我以前从未玩过这款游戏我的生活) 所以我发疯了(因为之前的所有游戏都是无用的,我必须重新开始)。

在我冷静下来之后,我决定改变我的生活。第一个大变化是在游戏中添加一些代码。更具体一点:一种方法可以保存我所穿的物品,所以当我关闭游戏并重新开始时,我所看到的东西会给我的生活带来快乐 - &gt;:我仍然拥有上次拍摄的物品。

这么长的故事简短: 当我点击一个按钮(它将其alpha值改为0.5)并关闭FLA时,我该如何做到这一点, 每当我打开相同的FLA时,我之前点击的按钮将显示为现在点击(它的alpha值为0.5)

2 个答案:

答案 0 :(得分:1)

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

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

如果您要为互联网创建游戏,则需要使用SharedObjects(a.k.a. cookies)存储此数据。

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

我不会进入这里,因为那些是讲座,而不是答案。请参阅以上链接以开始使用。

答案 1 :(得分:0)

我不明白你究竟想做什么。但这是我的简单方法就是这样。

// 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();
    } 
}

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