“服务器的广播的重点就在于如何计算出广播的对象。很显然,在一张很大的地图里面,某个玩家在最东边的一个动作,一个在最西边的玩家是应该看不到的,那么怎么来计算广播的对象呢?最简单的办法,就是把地图分块,分成大小合适的小块,然后每次只象周围几个小块的玩家进行广播。那么究竟切到多大比较合适呢?一般来说,切得块大了,内存的消耗会增大,切得块小了,CPU的消耗会增大(原因会在后面提到)。个人觉得切成一屏左右的小块比较合适,每次广播广播周围九个小块的玩家,由于广播的操作非常频繁,那么遍利周围九块的操作就会变得相当的频繁,所以如果块分得小了,那么遍利的范围就会扩大,CPU的资源会很快的被吃完。
切好块以后,怎么让玩家在各个块之间走来走去呢?让我们来想想在切换一次块的时候要做哪些工作。首先,要算出下个块的周围九块的玩家有哪些是现在当前块没有的,把自己的信息广播给那些玩家,同时也要算出下个块周围九块里面有哪些物件是现在没有的,把那些物件的信息广播给自己,然后把下个块的周围九快里没有的,而现在的块周围九块里面有的物件的消失信息广播给自己,同时也把自己消失的消息广播给那些物件。这个操作不仅烦琐而且会吃掉不少CPU资源,那么有什么办法可以很快的算出这些物件呢?一个个做比较?显然看起来就不是个好办法,这里可以参照“二维矩阵碰撞检测‘的一些思路,以自己周围九块为一个矩阵,目标块周围九块为另一个矩阵,检测这两个矩阵是否碰撞,如果两个矩阵相交,那么没相交的那些块怎么算。这里可以把相交的块的坐标转换成内部坐标,然后再进行运算。”
看了以后,不知道“二位矩阵碰撞检测”是什么意思,希望有大虾帮忙指点指点!!
5 个解决方案
#1
关注/
#2
在 专题开发板 的游戏板块可能更容易找到答案。。
#3
“二位矩阵碰撞检测”就是说用矩阵来说明一张地图,有点像做一些棋类游戏,比如把一张地图切成3行3列:
__|__|__
__|__|__
| |
然后定义0为可走的,1为不可走的,这样就可以表示地图某个点是否为障碍物了。比如可以声明一个二维数组:
int a[3][3];
用来记录整个地图的信息。当玩家用鼠标点了下一点,则首先要断定下一点是否可到,即在a中的相应值是否为0。
__|__|__
__|__|__
| |
然后定义0为可走的,1为不可走的,这样就可以表示地图某个点是否为障碍物了。比如可以声明一个二维数组:
int a[3][3];
用来记录整个地图的信息。当玩家用鼠标点了下一点,则首先要断定下一点是否可到,即在a中的相应值是否为0。
#4
友情UP!
#5
up
#1
关注/
#2
在 专题开发板 的游戏板块可能更容易找到答案。。
#3
“二位矩阵碰撞检测”就是说用矩阵来说明一张地图,有点像做一些棋类游戏,比如把一张地图切成3行3列:
__|__|__
__|__|__
| |
然后定义0为可走的,1为不可走的,这样就可以表示地图某个点是否为障碍物了。比如可以声明一个二维数组:
int a[3][3];
用来记录整个地图的信息。当玩家用鼠标点了下一点,则首先要断定下一点是否可到,即在a中的相应值是否为0。
__|__|__
__|__|__
| |
然后定义0为可走的,1为不可走的,这样就可以表示地图某个点是否为障碍物了。比如可以声明一个二维数组:
int a[3][3];
用来记录整个地图的信息。当玩家用鼠标点了下一点,则首先要断定下一点是否可到,即在a中的相应值是否为0。
#4
友情UP!
#5
up