首先,我们考虑一下,角色控制有哪几种类型
1.当前用户的游戏角色
2.非本用户游戏角色,但是与当前用户角色在同一张地图上的其他角色
那么针对这样两种控制,我想到了使用不同的控制器,第一种:playerInputController、第二种EntituController,
playerInputController 这个控制器用来控制当前用户的角色,他是通过用户输入的键位来实现移动
EntityController 是用来控制场景中其他用户角色的移动,
至此,第一个问题告一段落,来看下一个问题
playerInputController 这个控制器很好实现,EntityController要如何实现,当前用户怎样才能知道其他玩家的移动状态,或者更简单的说,其他玩家在地图中的位置
1.我们先来解决最简单的问题,当前用户如何才能知道其他玩家在地图中的位置
解决方法:每隔一段时间,其他玩家所在的客户端,主动向服务器提交它在地图中的位置,服务器收到以后,向当前玩家发送其他玩家在地图中的位置即可,
2.在来看一下移动状态的问题,其实上一个问题解决之后,这个问题也是很好解决的,只要其他玩家在发送自己的位置的时候,把自己的移动状态也发送到服务器不就可以了?
至此,这个问题解决
新的问题来了,现在当前的玩家已经知道了其他玩家在当前地图中的位置,那么怎样才能将他映射成真正的移动状态呢?
1.首先解决最简单的问题,我并不映射为真正的移动状态,我仅仅是把角色移动到它在地图中真正的位置
解决方法:每一个当前角色每隔一帧都向服务器报告自己的位置信息,每当服务器接收到这样的信息之后,立刻将这个角色的位置信息,广播给其他与这个角色在同一张地图的所有玩家(当然,这里可以设置一些参数,比如,只广播给与这个玩家相距多少范围内的玩家)
2.简单的问题解决了,下面来解决映射移动状态的问题,其实与上一个问题一样,只需要在报告位置的同时附加上当前的移动状态即可,当其他角色收到这样的数据,就可以通过EntityController来控制其他玩家的移动
至此问题全部解决,这里只是提供了我在做的时候的一些思路,肯定还有性能更好,效率更快的方法!