游戏进行的时候,在内存中出现的情形是这样的:
内存空间是由一个个格子在长宽高方向连续排列而形成的空间,空间中每个格子都有自身的不重复的编号。
那么,不妨把战场想象成一个1000 X 1000 X 1000的空间,而在战场中的人物则是一个10 X 10 X 10的立方体。和355不同,354的景深开尽了也不是全场,这样做可以保证内存空间的低使用率,减轻cpu运算,从而获取流畅的速度。
显然,战场中能容纳的人数十分有限。为了防止溢出,程序不会容许同时存在“人类”的实例数超过一定数量。所以尸体不可能永远不消失,因为它始终占用了一个实例大小的空间。于是就出现了“走一段距离,然后回头尸体不见了”的现象。
还有另外一个更重要的原因就是cpu的运算。人物有运动,就必然存在运算。同屏人数多,运算量大,大量运算同时进行,就会出现等候,甚至死锁。这就是卡的本质。
三、敌兵的绝对防御。回到前面描述的内存空间,当人物攻击时,在那10 X 10 X 10的立方体X相邻的位置取一个1 X 1 X 1的方格k,附上攻击状态。当另外一个10 X 10 X 10的立方体Y靠近,就会通过编号判断Y内的方格是否与之邻接,是则攻击成功,否则失败。由于一个攻击动作存在多个瞬间,所以这种判断要进行很多次。这是最简单的攻击判定。加入防御事件之后,当一个角色防御,则将他防御面的100个方格设为防御状态,判断与k邻接的Y内的方格是否防御,是则攻击失败,否则成功。而绝对防御则免却这个设定的麻烦,只要把Y的属性设定为防御,判断时候只需要将k和Y的防御属性作比较就行。所以koei就是用绝对防御来减轻内存和cpu的压力,让它们全心全意服务于场景和人数。
然而这个解决方案却不能解决问题。或者说只是杯水车薪。