我以前设计过多人游戏,但现在我想创建一个用于学习/挑战目的的 MMORPG 架构。我想在单个服务器上模拟数百(或数千)个并发玩家。
到目前为止一切顺利,除了现在我面临一个问题,即找出一种尽可能快地更新服务器上所有游戏对象的好方法。
我所说的游戏对象是指所有玩家、生物、子弹。
问题是所有玩家、生物、子弹都存储在服务器端内存上的集合中以便更快地处理,并且遍历所有这些以检查碰撞、更新健康、更新移动等……花费的时间太长了.
假设我有 1000 个玩家,全世界有 10000 个小怪,所有玩家和生物都负责创建 5 个其他游戏对象(不多不少),例如子弹。
这将在一个集合中给出 (1000 + 10000) * 5 = 55000 个游戏对象。
在具有 4gb RAM 的双核 HT i5 上迭代所有对象以更新它们需要永远(几分钟)。这是错误的。
迭代时,代码如下所示(伪):
for(int i = 0; i < gameobjects.Count; i++) {
for(int j = 0; j < gameobjects.Count; j++) {
// logic to verify if gameobjects[i] is in range of
// gameobjects[j]
}
}
作为一种优化,我正在考虑将我的游戏对象划分为不同的区域和集合,但这并不能解决我需要每秒更新所有对象多次的问题。
我应该如何继续更新服务器端的所有游戏对象?我进行了大量搜索以找到有趣的游戏设计模式,但到目前为止还没有结果。:(
提前致谢!