0

この非常に単純な「ゲーム」に、3 つのセーブ/ロード スロットを与えようとしています。別のチュートリアルに従って、1 つの保存スロットで機能させることができますが、さらに追加しようとすると、次のエラー メッセージが表示されます。

1046:型が見つからないか、コンパイル時の定数ではありません: save2。

1046:型が見つからないか、コンパイル時の定数ではありません: save3。

私はactionscript 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");
}
4

1 に答える 1

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");
            }
        }
    }
}
于 2013-05-19T22:21:16.133 に答える