延迟networkState.StartGame

时间:2012-10-23 20:00:36

标签: xna client-server

我正在处理一个项目,并且遇到了packetreader / packetwriter类的问题。

基本上游戏加载并允许玩家创建或加入会话。当他们选择其中任何一个选项时,它会进入大厅屏幕。这部分工作正常。在大厅屏幕中,他们可以选择3种不同的选项,然后选择在准备好时开始游戏。选项详细说明了加载代表玩家的纹理,此时只是不同颜色的方块。一旦所有玩家都开始游戏,它就进入游戏界面,玩游戏。如果较慢的计算机是主机,它可以很好地工作。但是,如果较快的计算机是主机,它会加载到游戏界面中,然后较慢的计算机才有机会完成通过PacketReader和PacketWriter对象传递的所有更新。

有没有办法等到所有玩家在继续播放之前完成从这些流中读取数据?我正在使用来自客户端服务器演示http://xbox.create.msdn.com/en-US/education/catalog/sample/network_cs的代码和一个名为NetworkStateManagement的项目(由朋友找不到链接)的演示作为我的推理和逻辑的基础。任何帮助将不胜感激。

我所得到的例子。在Halo Reach中说,大厅玩家中有1人,玩家1,2,3,4,5。如果玩家1更换了他的一件盔甲,它会在大厅和实际比赛中更新其他玩家的屏幕。在我的游戏中,每个玩家都用一个颜色方块表示。我希望它在哪里如果玩家1选择红色而玩家2选择蓝色它会相应地改变。大堂屏幕由每个玩家列表和5个菜单选项组成。第一个菜单选项是Start Game,其余选项是玩家可以选择的不同颜色。选择开始游戏时,它会切换在NetworkSession对象中使用的玩家isReady状态。这是我在Update函数中的代码,如果播放器是主机并且每个人都已将自己标记为已准备好,则运行该代码。

else if (networkSession.IsHost && networkSession.IsEveryoneReady) 
{ 
     // Before starting the game make sure the server has gone through and updated. 
     // Also go through each player and make sure they have been updated so that no information is left in the packetReader and packetWriter 
     if (packetReader.Length > 0) 
     { 
         UpdateServer(); 
     } 
     // Read any incoming network packets. 
     foreach (LocalNetworkGamer gamer in networkSession.LocalGamers) 
     { 
         if (gamer.IsHost) 
         { 
             ServerReadInputFromClients(gamer); 
         } 
         else 
         { 
             ClientReadGameStateFromServer(gamer); 
         } 
     } 
     // The host checks whether everyone has marked themselves 
     // as ready, and starts the game in response. 
     networkSession.StartGame(); 
} 

0 个答案:

没有答案