我使用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;
});
}
}
答案 0 :(得分: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
});
}
我改变了一些事情:
meSave
函数内部不需要内部命名函数。我用另一个Promise
替换了这个函数。通过这种方式,您的调用代码可以依赖callbacks
的{{1}}来了解该文件已成功保存到存储。 Promise
设置了一个本地不存在的变量(可能是你代码中的其他地方)。