Answers:
如何使用文件来跟踪玩家位置?
您将播放器位置写入文件。例如,如果您用唯一编号(或GUID)标识每个播放器,则可以将其用作文件名。在文件中,只需以以后可以解析的格式写出位置数据即可。例如,如果玩家#467239位于那个(x,y,z)位置,则467239.txt
可能包含。20, 3, 19
这与您对数据库所做的操作没有什么不同,但是,此操作不应使数据库“变慢”,它应该非常快(可能比文件快),因为您有更多的磁盘IO开销或IO锁定竞争-如果您在每个文件中存储了多个职位-则采用基于文件系统的方法)。
也许您正在尝试使用数据库或文件系统在运行时存储玩家位置?您根本不应该这样做。
在运行时,应该像其他任何类型的游戏一样,在服务器中将玩家位置保存在内存中并进行更新。可以定期将它们保存到磁盘或其他永久性存储中-例如,当播放器休息,保存或注销时。
但是写每个球员的位置来存储每次更新都是不必要的,而且效率很低。它永远不会足够快地处理任何类似于“大规模”玩家规模的事情。
我有一个单独的线程,每隔500个左右的游戏周期就会排队保存到文件中。否则,您应将所有内容存储在RAM中。
我在服务器上所做的就是存储玩家的方向(向量)和最后位置,如果玩家有速度,我会每2秒计算一次玩家的新位置。
客户端当然具有其自己的位置位置,并将其新的方向(矢量)发送到服务器。
如果客户自上次检查以来已移动一定距离,则服务器将对位置进行授权,并发送位置数据包(这可能导致橡皮筋效果,因为客户不同步)。
所有这些当然都在记忆中发生。