我有一个基于 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 是因为我严重怀疑任何东西都不会超过 <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.
}
我读过许多不同的教程和书籍,它们争论完全不同的容器类型:向量、映射、链接列表、数组。我只是不知道什么是最好的存储 TileObjects(其中一些可能会不断移动,可以像丢弃/拾取物品一样被破坏或添加,还有一些可能像树或岩石一样保持静止)。