我以前设计过Multiplayers Games,但现在我想创建一个用于学习/挑战目的的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] } }
作为优化,我正在考虑将我的游戏对象划分到不同的区域和集合中,但这不能解决我需要每秒多次更新所有对象的问题.
我该如何继续更新服务器端的所有游戏对象?我做了大量的搜索来找到有趣的游戏设计模式但到目前为止没有结果.