1

我使用 melonJS for Windows8 创建了一个基于 HTML5+JS 的游戏。

但是,如何将玩家的持久游戏数据保存到磁盘文件(最好是 localFolder)中。

我已经阅读了 MSDN 论坛中给出的示例,但没有提到将其保存为 JSON 格式文件……而且我对 Win8 应用程序编程有点陌生。

无论如何,这是我尝试过的(当玩家选择保存时调用此函数):

function meSave() {
    //create a var to store the the persisting data during the play
    var dataSaved = {
      data: {
        progress: game.data.progress,            

        HP: game.data.HP,
        MP: game.data.MP,
        Level: game.data.Level,
        maxHP: game.data.maxHP,
        maxMP: game.data.maxMP,
        Money: game.data.Money,

        currPos: {
            x: me.game.getEntityByName('mainPlayer')[0].pos.x,
            y: me.game.getEntityByName('mainPlayer')[0].pos.y,
        },
        currStage: me.levelDirector.getCurrentLevelId(),
      }
    };

    var applicationData = Windows.Storage.ApplicationData.current;
    var localFolder = applicationData.localFolder;
    var filename = "dataFile.json";

    function writeTimestamp() {
        localFolder.createFileAsync("dataFile.json",
           Windows.Storage.CreationCollisionOption.replaceExisting)
             .then(function (file) {               
                 return Windows.Storage.FileIO.writeTextAsync(file,
                           JSON.stringify(dataSaved));
             }).done(function () {
                 game.savingDone = true;
        });
    }   
}
4

1 回答 1

1

最明显的问题似乎是您没有writeTimestamp在代码中调用该函数。您还可以考虑做一些其他的事情:

meSave()
    .done(function () {
        console.log('saved!');
    });

function meSave() {
    //create a var to store the the persisting data during the play
    var dataSaved = {
        /* put or fetch your game data here */
    };

    var applicationData = Windows.Storage.ApplicationData.current;
    var localFolder = applicationData.localFolder;
    var filename = "dataFile.json";

    return localFolder.createFileAsync(filename,
            Windows.Storage.CreationCollisionOption.replaceExisting)
        .then(function (file) {
                 return Windows.Storage.FileIO.writeTextAsync(file,
                            JSON.stringify(dataSaved));
        }).then(function() {
            // dataSaved.done ... although this would be lost if dataSaved is local
        });
}

我改变了一些东西:

  1. 函数内部不需要内部命名meSave函数。我已经用另一个Promise. 通过这种方式,您的调用代码可以依靠callbacksPromise知道文件已成功保存到存储中。
  2. 您有额外的变量(未使用),并且done文件创建正在设置一个本地不存在的变量(也许它在您的代码中的其他地方)。
于 2014-02-01T15:46:12.587 回答