【发布时间】:2013-06-01 19:03:26
【问题描述】:
我有一个基于 2D 瓦片的世界,它是使用一个简单的数组创建的:World[100][100]。
我计划制作多人游戏,所以我认为最好让服务器向客户端发送玩家周围的所有图块,并且只发送客户端需要的信息:要渲染什么纹理/精灵,以及什么位置来渲染它。
为此,我假设创建自己的 TILE 类会很好,该类具有 tileType(草、沙、水等)并包含 10 个 TileObjects 的数组。 TileObject 是一个包含三个变量的类:objectType(它是一个字符吗?一个项目?一棵树?一块岩石?),一个 int objectID(它与实际的对象相关联,因此它知道字符是“Leeroy Jenkins ",然后可以将 Leeroy 的动画和方向发送给客户端进行渲染。)和 objectPosition(来自 Tile 的 X 和 Y。如果需要,这可以延伸到 Tile 之外。)
虽然我不确定如何处理大于单个图块的对象或角色(例如碰撞消耗许多图块的龙),但这听起来是最好的设计。
我应该使用什么类型的容器来将 TileObjects 存储在 TILE 类中?现在我有一个数组,但我怀疑这对性能有好处吗?有些瓷砖可能有 0 个 TileObject,而其他瓷砖可能有 5 个以上。我使用 10 是因为我严重怀疑任何东西都不会超过
class Tile
{
private:
TileObject TileObjects[10]; //up to 10 objects on a single tile
TileTerrainType tileTerrainType; //GFX to display Grass, Sand, Water, Swamp, etc.
}
我阅读了许多不同的教程和书籍,它们争论完全不同的容器类型:向量、映射、链接列表、数组。我只是不知道存储 TileObject 的最佳方式是什么(其中一些可能会不断移动,可能会像丢弃/拾取物品一样被破坏或添加,而另一些可能会像树或岩石一样保持静止)。
【问题讨论】:
-
澄清一下 - 您使用 Tiles 来表示不动的东西(地形类型)和移动的东西(角色、物品)?
标签: c++ stl containers