`
feiqitian
  • 浏览: 18495 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

TankWar网络版的开火问题

 
阅读更多

          现在学到TankWar的网络版部分了,觉得马老师在处理MissileNewMsg消息的时候弄得太麻烦了,还得处理处理爆炸和MissileDeadMsg消息。我觉得可以不用这个消息,直接给各个客户端发送坦克的Fire也就是开火消息FireMsg,要发送的信息只有两个内容:1,消息类(FireMsg );2,myTank的tankID 。当接收端收到这个消息的时候, 解析出tankID,即:

     
 int tankID; 
 tankID = dis.readInt(); 
       for(int i = 0; i < gw.tanks.size(); i++) { 
             if(tankID == gw.tanks.get(i).ID) { 
                 gw.tanks.get(i).fire();  //gw是GameWindow的实例,就是马老师的tc
                 return; 
             } 
       } 

当然,FireMsg要坦克调用fire()方法之后发送:

  case KeyEvent.VK_SPACE: 
           fire(); 
           FirewMsg fireMsg = new FirewMsg(this.ID); 
           gw.tankClient.send(fireMsg);  //gw是GameWindow的实例,就是马老师的tc
  break; 

这样处理的好处是所有的Missile都是本地产生的,不用再处理MissileDeadMsg和爆炸的问题。 

          关于这个问题,我发邮件问过马老师,他说也可以这样做:)不过MissleDeadMsg是必须的,不然的话可能会不同步。我试了,这样处理后非常流畅,没有感觉延时,可能是客户端太少(只有3个),所以感觉不出来。

 

2
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics