AS3:多个保存/加载插槽的问题

时间:2013-05-19 21:45:47

标签: actionscript-3

我正在尝试使用这个非常简单的“游戏”并给它三个保存/加载插槽。按照单独的教程,我可以使用单个保存槽,但是一旦我尝试添加更多,它会给我以下错误消息。

1046:未找到类型或不是编译时常量:save2。

1046:未找到类型或不是编译时常量:save3。

我是动作脚本3的新手,所以我确定我是一个非常新鲜的人,但我已经尝试了很长一段时间,但似乎无法做到。整个过程由已放置在场景上的按钮控制。我感谢任何帮助。

代码:

import flash.net.SharedObject;

var saveDataObject:SharedObject;
var currentScore:Number = 0

init();

function init():void{

btnAdd.addEventListener(MouseEvent.CLICK, addScore);

btnSave1.addEventListener(MouseEvent.CLICK, save1);
btnSave1.addEventListener(MouseEvent.CLICK, saveData);

btnSave2.addEventListener(MouseEvent.CLICK, save2);
btnSave2.addEventListener(MouseEvent.CLICK, saveData);

btnSave3.addEventListener(MouseEvent.CLICK, save3);
btnSave3.addEventListener(MouseEvent.CLICK, saveData);

btnLoad1.addEventListener(MouseEvent.CLICK, save1);
btnLoad1.addEventListener(MouseEvent.CLICK, loadData);

btnLoad2.addEventListener(MouseEvent.CLICK, save2);
btnLoad2.addEventListener(MouseEvent.CLICK, loadData);

btnLoad3.addEventListener(MouseEvent.CLICK, save3);
btnLoad3.addEventListener(MouseEvent.CLICK, loadData);

}

function save1(e:MouseEvent):void{
saveDataObject = SharedObject.getLocal("savefile1");
}

function save2(e:MouseEvent):void{
saveDataObject = SharedObject.getLocal("savefile2");
}

function save3(e:MouseEvent):void{
saveDataObject = SharedObject.getLocal("savefile3");
}

function addScore(e:MouseEvent):void{
currentScore += 1;
updateScoreText();
}

function saveData(e:MouseEvent):void{
saveDataObject.data.savedScore = currentScore;
trace("Data Saved!");
saveDataObject.flush();
trace(saveDataObject.size);
}

function loadData(e:MouseEvent):void{
currentScore = saveDataObject.data.savedScore;
updateScoreText();
trace("Data Loaded!");
}

function updateScoreText():void
{
txtScore.text = ("Score: " + currentScore);
trace("Score text updated");
}

1 个答案:

答案 0 :(得分:1)

我尝试了你的代码,它就像一个魅力......

无论如何,我做了一个更简单的版本,不使用这么多的功能和事件 这是它的纯AS3版本(只需将其保存为Test.as3并在Flash中用作文档类),但您可以复制Test()方法的内容并粘贴到操作框架中。

package
{
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.net.SharedObject;
    import flash.text.TextField;

    public class Test extends Sprite
    {
        public function Test()
        {
            /***** START: Faking buttons and field *****/
            var txtScore:TextField = new TextField();
            addChild(txtScore);

            var btnAdd:Sprite = new Sprite();

            var btnSave1:Sprite = new Sprite();
            var btnSave2:Sprite = new Sprite();
            var btnSave3:Sprite = new Sprite();

            var btnLoad1:Sprite = new Sprite();
            var btnLoad2:Sprite = new Sprite();
            var btnLoad3:Sprite = new Sprite();

            var items:Array = [btnAdd, null, btnSave1, btnSave2, btnSave3, null, btnLoad1, btnLoad2, btnLoad3];

            for (var i:int = 0; i < items.length; ++i)
            {
                var item:Sprite = items[i];

                if (item)
                {
                    item.graphics.beginFill(Math.random() * 0xFFFFFF);
                    item.graphics.drawRect(0, 0, 100, 25);
                    item.graphics.endFill();

                    item.x = 25;
                    item.y = i * 30 + 25;

                    addChild(item);
                }
            }
            /***** END: Faking buttons and field *****/

            var saveDataObject:SharedObject;
            var currentScore:Number = 0

            btnAdd.addEventListener(MouseEvent.CLICK, addScore);

            btnSave1.addEventListener(MouseEvent.CLICK, save);
            btnSave2.addEventListener(MouseEvent.CLICK, save);
            btnSave3.addEventListener(MouseEvent.CLICK, save);

            btnLoad1.addEventListener(MouseEvent.CLICK, load);
            btnLoad2.addEventListener(MouseEvent.CLICK, load);
            btnLoad3.addEventListener(MouseEvent.CLICK, load);

            function getLocal(target:Object):String
            {
                if (target == btnSave1 || target == btnLoad1)
                {
                    return "savefile1";
                }
                else if (target == btnSave3 || target == btnLoad2)
                {
                    return "savefile2";
                }
                else if (target == btnSave2 || target == btnLoad3)
                {
                    return "savefile3";
                }
            }

            function save(e:MouseEvent):void
            {
                var local:String = getLocal(e.target);
                saveDataObject = SharedObject.getLocal(local);
                saveDataObject.data.savedScore = currentScore;
                trace("Data Saved!");
                saveDataObject.flush();
                trace(saveDataObject.size);
            }

            function load(e:MouseEvent):void
            {
                var local:String = getLocal(e.target);
                saveDataObject = SharedObject.getLocal(local);
                currentScore = saveDataObject.data.savedScore;
                updateScoreText();
                trace("Data Loaded!");
            }

            function addScore(e:MouseEvent):void
            {
                currentScore += 1;
                updateScoreText();
            }

            function updateScoreText():void
            {
                txtScore.text = ("Score: " + currentScore);
                trace("Score text updated");
            }
        }
    }
}