以这种方式在网页游戏中对地图图块使用数组会不会过于占用资源


Will using an array for map tiles in a web game in this manner be too resource intensive?

我正在开发一个基于PHP的浏览器RPG,其中玩家在网格地图上移动。 我的地图是通过二维矩阵定义的,每个值都是一个 21 个字符的字母和数字字符串。 此字符串是一个编码值,用于告诉游戏该磁贴上会发生什么,它为我提供了将来其他功能的广泛选择。 我考虑过只使用整数作为这个值,但我决定要保留地图的一些可读性,这样我仍然可以关注文件。

我目前使用地图创建脚本将地图输出到.csv文件中,然后玩家移动类打开该地图文件,找到玩家当前坐标并沿玩家指示的方向移动。

我目前的地图大小最高为 200x300 个图块,每个图块都包含该网格的值 (AAAAB111CCC2222223333);但是,我希望将来能够将这些图块增加到 1000x1000(大于此值可能会看到整个世界的区域的地图)。

我将玩家坐标存储在用户状态数据库中,因此我只会读取玩家移动范围内的.csv地图行,并防止每次玩家移动时将整个地图加载到变量中。 但是,这仍然可以是一个 11x1000 网格,每个磁贴中都有这 21 个字符的代码。 找到每次移动的结果后,我将取消设置数组。

即使采取了预防措施,我担心如果许多用户同时玩游戏,这在未来会成为太大的资源负担,我想知道我是否应该将地图信息存储在数据库中。

我的其余用户和游戏数据存储在几个大型数据库中。 当我开始开发我的游戏时,我不相信这些地图网格数据集足够复杂,以至于需要将它们放入自己的数据库中,而且似乎使用数组进行移动很容易($location[$x][$y])。但是,现在我想知道使用.csv文件是否会损害我的性能。

从 csv 读取文件肯定会有更多的工作,尤其是在增加地图大小的情况下。 我看到的仅获取部分 csv 进行加载的问题是,您仍然必须解析数据才能获得玩家的 x,y 坐标。 在(或同时)解析每个字符串之后,以确定它是否包含在近玩家集中。

正如你所说,随着时间的推移,你期待更多的球员。 打开/解析文件所需的读取驱动器读取量会迅速增长并导致问题,除非您有某种形式的缓存可用。

所以,我会说使用数据库,越快越好。是的,使用 csv 会损害性能。