【问题标题】:Object storage for HTML5 game - what to use?HTML5 游戏的对象存储 - 使用什么?
【发布时间】:2012-09-18 16:34:42
【问题描述】:

我是一个相当精通的程序员,所以学习新技术应该不是什么大问题。话虽如此,我目前正在尝试使用 canvas/javascript 等在 HTML5 中制作纸牌游戏。

我目前的问题是使用什么来存储卡片的实例。我正在考虑使用 XML 来存储卡片数据,但我想限制浏览器必须做的工作量,以便游戏运行更流畅,我听说 JSON 是一个不错的选择,但我只是寻找建议。谢谢!

【问题讨论】:

  • 你是什么意思,这些卡片的实例?那些将是直接的 JavaScript 对象,是吗?
  • 是的。卡名、类型、马力等
  • 马力?这是什么卡牌游戏?不是标准的 52 包吗?
  • 这是多人纸牌游戏吗?
  • 最终会,而且不是标准的 52 包

标签: javascript xml json html css


【解决方案1】:

我认为 JSON 更好。
您可以在服务器端将对象序列化为 JSON 并将 JSON 字符串发送到客户端(浏览器),然后您的客户端将能够使用 JSON.parse 将 JSON 字符串解析为常规 JavaScript 对象。 通过这种方式,您无需遍历 XML 来查找特定节点,而只需使用本机 JavaScript 对象/数组以更方便的方式处理数据。 此外,在大多数情况下,JSON 比 XML 更紧凑,因此可以节省带宽并加快数据加载速度。
此外,数据类型在这里可能很重要 - JSON 正确表示数据类型(整数、布尔值、浮点数、字符串),而 XML 将它们存储为字符串,因此您需要一些额外的属性来在序列化期间设置数据类型并在反序列化期间确定它。

【讨论】:

    【解决方案2】:

    我不确定如何在没有框架的情况下执行此操作,但我会使用 Backbone.JS 并创建一个实例外观模型。例如:{CardNumber:'2', CardColor: 'red', CardClass: 'hearts'}。现在我将创建一个集合来保存所有这些模型,请参阅骨干集合。

    所以我会在客户端存储所有这些数据,并可能为用户提供保存游戏的选项,将这些数据保存到数据库中。这会将其存储为 JSON,然后当您将其持久化到数据库时,您可以对其进行序列化以获取各个组件。

    如果您不想保存到数据库并且不想使用框架。尝试在 Javascript 中实现堆栈/队列。见:How do you implement a Stack and a Queue in JavaScript?

    我希望这能回答你的问题。

    【讨论】:

      【解决方案3】:
      • 坚持使用 JSON,因为 JSON 只是普通 JS 对象的字符串表示,浏览器对它非常满意。 JS 没有很好的 XML 处理,那太昂贵了。

      • 使用 HTML5 localStorage 保存数据,直到您真正需要与服务器同步。频繁的服务器操作会导致您的游戏受到影响。使用批量数据传输而不是许多小型服务器连接(例如在开始和结束时)。

      • 如果画布图形很密集,请考虑使用游戏库。我曾经使用过http://jawsjs.com,但应该有更好的库可用。选择性地仅渲染动态对象,而不是画布上的所有内容。

      【讨论】:

        【解决方案4】:

        JSON 与 localStorage 结合使用是一个很好的方法。

        有一些库可用于序列化和反序列化 Javascript 对象,并允许您从 localStorage 存储和检索它。 Simple Github search 是一个很好的开始

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-25
          • 1970-01-01
          • 1970-01-01
          • 2014-08-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多