【问题标题】:Better way to store game objects?存储游戏对象的更好方法?
【发布时间】:2015-05-03 19:20:53
【问题描述】:

我正在编写基于图块的 2d 游戏。

我将第一层(水、草、泥土等...)存储为二维整数数组,其中每个值 [x,y] 代表特定的瓷砖。

没关系,但我还需要以某种方式存储第二层(对象)。不可能像瓦片那样使用二维数组,因为每个对象都有一些附加数据。例如:胸部对象包含有关其中物品及其数量的数据,烤箱包含有关燃料的数据等等......

我更喜欢将两个图层都永久存储在 RAM 中,因为我的地图的大小不是那么大。我需要将 layer1 和 layer2 保存在文件中。 layer1 我使用二进制文件,它既快速又简单。

所以我很感兴趣,存储对象层最有效的方法是什么? (再一次,我想在游戏运行期间一直将它放在RAM中,并将其保存为二进制文件) 谢谢!

【问题讨论】:

  • 您没有指定语言,但假设它允许 OOP,您可以为第二层中的每个项目创建一个类,然后使用这些对象的二维数组。
  • 我正在使用 C++,是的,这是个好主意,但是如何将它存储在文件中?另外,我认为这需要很多内存,因为树和石头对象没有额外的信息,而箱子比烤箱有更多这样的数据。而且二维数组中的大多数此类对象都只是 NULL,因为我没有在每个图块上都有对象。

标签: arrays binary tile


【解决方案1】:

最简单的方法是像这样存储一个对象数组:

  1. 对象数量
  2. 对象数据

每个对象数据都可以是这样的可变长度记录:

  1. 对象类型(树、敌人、树干等)
  2. x, y 坐标
  3. 其他数据取决于对象类型(树的高度、敌人的攻击和防御、树干的内容再次作为数组等)

通过这种方式,您可以根据对象类型读取/写入其他对象数据。

【讨论】:

  • 但是我怎样才能将这样的记录存储在 RAM 中呢?当然,我可以将对象作为列表存储在文件中,但我不知道如何从 RAM 中使用它。你推荐什么样的结构?
  • 我想最好也将第二层存储为二维数组。因此,您可以轻松回答“坐标 x,y 是什么?”的问题。使用抽象函数“GetType()”为对象创建一个接口,并从该接口继承所有对象。覆盖每个对象中的“GetType()”以返回对象的类型。
【解决方案2】:

我想,我可以使用可变长度数组的二维数组来存储它。并使用一些除数将其存储在二进制文件中,即:

http://rghost.ru/8DZHjSm5M.view (图片在这里)

我们在文件中有 N*N 条这样的记录。

所以 arr[0][0][0] 给了我一种对象类型,arr[0][0][n] 给了我一些额外的信息。只需要编写一些解析器。

你怎么看?

【讨论】:

    猜你喜欢
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 2019-11-25
    • 1970-01-01
    • 2011-02-19
    • 2012-09-18
    • 1970-01-01
    相关资源
    最近更新 更多