【问题标题】:How do I save an array to a file and manipulate it from within my code?如何将数组保存到文件并在我的代码中对其进行操作?
【发布时间】:2018-02-22 20:48:31
【问题描述】:

这是在 p5.js 中,其中包含大多数 javascript 函数! 我正在尝试为我的游戏制作一个保存文件。我的意思是:用户在我的游戏中按下了保存按钮。它更新保存在游戏包中包含的文件中的数组,玩家继续玩。我将如何做这样的事情(创建我的代码可以访问并更改的文件)。

    var SM = {
//save files
    sf1: [1,0,0,0,0],
         [0,0,0,0,0],
         [0,0,0,0,0],

    sf2: [1,0,0,0,0],
         [0,0,0,0,0],
         [0,0,0,0,0],

    sf3: [1,0,0,0,0],
         [0,0,0,0,0],
         [0,0,0,0,0],
};

还有一件事(从这里开始处理代码):我尝试使用像 saveStrings() 这样的处理函数;和 loadStrings();但我无法将 saveStrings() 保存到特定位置,也无法正确加载 txt 文件。这是我用于此的代码:

var result;
function preload() {
  result = loadStrings('assets/nouns.txt');
}

function setup() {
  background(200);
  var ind = floor(random(result.length));
  text(result[ind], 10, 10, 80, 80);
}

我在草图文件夹中有一个名为 assets 的文件夹,assets 有一个名为 nouns 的 txt 文件,其中包含字符串(从 saveStrings 下载然后手动移动),但草图不会通过加载屏幕?

【问题讨论】:

  • 您的游戏是否应该托管在任何玩家都可以拥有自己存档的服务器上?
  • 是的,它还会有单独的本地存档,您可以在其中沙发斗殴或玩合作战役,或者一个玩家可以与其他人在线玩我向您展示的代码用于离线战役在线保存:会有不同的数组 var userDatabase = []; function newUser(usr,gamertag,pss,eml){ userDatabase.push({username: usr, ID: gamertag, password: pss, email: eml }); };
  • 我当然会添加更多参数来提供用户信息,但这将是在我使用我在这里收到的信息之后

标签: javascript html processing p5.js


【解决方案1】:

如果您从浏览器运行它,则无法按您的意愿保存或加载文件,期间。在浏览器 JavaScript 中保存和加载文件涉及用户交互,他们可以选择文件及其保存位置。

如果您想将其保存在本地,而不是尝试将其写入文件,您应该从localStorage 写入和读取它,然后您就可以做到这一点。

// save
localStorage.setItem('saveData', data);

// load
const data = localStorage.getItem('saveData');

如果它是直接在客户端(在浏览器之外)运行的游戏,例如用 Node.js 编写的,那么您会想要使用 fs 函数。


稍微扩展一下,如果您将保存数据作为对象:

const saveData = {
  state: [1,2,3],
  name: 'player'
};

然后要保存它,您只需调用:

localStorage.setItem('saveData', JSON.stringify(data));

您需要在保存它以使其正常工作时对其进行字符串化。要回读它,您可以使用getItem() 回读它:

const data = JSON.parse(localStorage.getItem('saveData') || '{}');

(如果之前没有保存过,额外的|| '{}' 位将处理并给你一个空对象。)

这实际上比尝试编写一个然后读入的 JavaScript 文件要容易得多。即使您正在编写一个文件,您也可能希望将其编写为 JSON,而不是 JavaScript。

【讨论】:

  • 好的,那么如何将文件保存到计算机?
  • 常用的方法是创建一个锚标签(<a>),其数据 URL 为href,建议的文件名为download,然后将其附加到正文并触发其click() 事件。它将触发正常的文件下载。要读入文件,您必须拥有<input>type="file",这将触发选择文件对话框。这些通常都不适用于游戏环境。
  • 好的,你的回答就足够了(它回答了我的问题)但是 JSON 文件仅用于本地存储还是我可以将它作为 JSON 保存在我的计算机上? (本地存储不只是清除历史记录时删除的 cookie 吗?)
  • 要将其保存到您的计算机,您必须使用我在我的 cmets 中提到的方法,这对于无缝的游戏体验确实不起作用。这是唯一的方法。 localStorage 有点像 cookie,但也更持久。它没有到期日,并且会持续更长的时间。是的,但是,它最终会消失。
  • 另一种可能的选择是将其保存为书签。这可以通过将您的保存数据编码为字符串来完成(有多种方法),然后对该字符串进行 base64 编码并使其成为一个 URL,例如:example.com/mygame?data=data-string-goes-here。然后,您可以让他们将该页面添加为书签以进行保存。许多在线角色模拟器(用于游戏)等都使用它。同样,这不是一种超级无缝的方法,而是使用 JS 的局限性。
【解决方案2】:

为了在 Javascript 中将字符串保存到文件中,我向您推荐这个 previous StackOverflow question,它提供了一个非常清晰且易于使用的库的链接,用于在 Javascript 中管理文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2023-01-01
    • 2020-08-13
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多