在游戲服務器開發中, 網絡通信是很關鍵的, 而在網絡通信中,數據的同步是關鍵, 在我的上一篇博客(
http://www.shnenglu.com/zhengxf/archive/2010/07/08/119737.html)中談的了數據如何同步的問題, 其中提到了兩點 1.數據發送給誰. 2.網絡延遲的話,如何同步.
上次主要談了網絡延遲時的同步問題,今天我們主要談論數據發送給誰的問題, 要談論這個問題,我們就不的不談論: 地圖, NPC, 玩家他們三個之間的關系.
其實地圖是個靜態的數據集合, 其中主要包含了地形信息和物品信息,這里的物品指的是靜態的,所以它是不需要進行同步的,也就是每個玩家在同一個地圖上看到信息是一樣的,所以這些信息有客戶端的場景管理器管理. 不進行網絡通信.
NPC: NPC主要分兩種 一種是靜態的NPC,如玩家獲取任務的NPC, 另外玩家升級打的怪, 也是NPC. 靜態的NPC有屬性和功能,但不需要同步, 動態的NPC(如怪)需要進行網絡同步,這里我們就有一個問題, 動態的NPC要將它的信息發送給誰呢?任何一個涉及到網絡通信的NPC和玩家都有一個共同的性質就是它有可見范圍,假如說一個玩家在十米范圍內可見,那么他就回將信息發送給距離十米以內的玩家和NPC, 這里有含有兩個問題: 一: 十米以外的NPC怎么辦, 二:怎么獲取十米以內的發送用戶。有兩種解決辦法:一是在場景中搜索找到要發送的用戶信息,告訴服務器讓服務器來發,二是發送自己的信息到服務器,服務器搜索NPC列表,和玩家列表,來發送,我覺的后著更合理。
玩家: 玩家的同步主要是玩家和玩家的同步, 如玩家每前進一步, 就向服務器發一條消息. 服務器在玩家列表中查找到范圍之內的其他玩家信息,并發送消息,這里有一個問題,是玩家要不要將消息發送給NPC?因為這種NPC也可以理解為機器人,它可以感知到敵人就在附近, 本身就在服務上, 所以不用發送消息, 但是NPC在感受到玩家的時候要向它(NPC) 可見范圍內的玩家發送消息.
接下來還有一個問題,是發送什么樣的消息的問題,因為針對NPC,和玩家,并不是所有的消息都發,而是有選擇向的發,這個問題我們下次討論。