驳《CS分辨率和爆头率的关系》
网络通信
看了第15期游戏广场的《CS分辨率和爆头率的关系》一文,颇有反对意见,下面我们来仔细分析一下。
众所周知,游戏程序或其他很多程序都一样,内部数据计算一般都采用高精度浮点运算,以适应不同要求的输出。用Photoshop处理图片时,图片有“分辨率”这一参数(比如300DPI),此参数其实就是内部运算分辨率,跟显示器显示分辨率和打印分辨率是无关的。通常此内部分辨率都远高于显示分辨率,目的是尽量保持图片不失真。
判断子弹是否击中头部,用游戏编程术语来说就是:子弹和头部是否发生“碰撞”。碰撞很好理解,比如我们玩空战游戏时要尽量逃避与敌机和子弹等发生碰撞,否则会伤血或坠机。在任何一款商业游戏中处理碰撞问题时都不会以显示的像素点为依据。道理很简单,扬兄也提到在低分辨率时会有马赛克现象,也就是说在更种分辨率下图形像素都有不规则性,不规则性的图形像素是很难用电脑来处理的(游戏都讲究效率问题),何况CS游戏是3D游戏,更不可能是以像素来记录图形。稍微有点电脑常识的人都知道,3D游戏都是以多边形来组成图形的,在3D显卡的性能指标中多边形生成能力还是很重要的一项指标。
在CS中计算碰撞时也同样不会用像素点去判断,让我们来深入分析此问题。以CS联网模式为例,CS联网模式需要一个服务器,此服务器实质是一个游戏数据存储机和处理机,通过网络将玩家的鼠标操作和键盘操作实时传递到服务器上,经过服务器运算再将游戏中的道具、人物等的位置数据、中弹情况(还有好多返回的数据不一一列举)返回给玩家,玩家的电脑根据服务器返回的数据实时生成图像。这是网络游戏的通用模式,这可以防止一些“不法分子”用FPE等游戏修改工具修改人物位置、物品数量等,因为这些数据都在服务器上。
我以简化的模式来说一下CS服务器的中弹(碰撞)的判断处理过程。人的头部用计算机表示其实就是一个球体(实际情况会复杂一些,一般用n个多边形来表示,多边形越多头部就越逼真),一个球体只需用两个参数来表示:圆心和半径。半径是死的参数,表示头部的大小,圆心表示的是头部的位置,是运动的。子弹一般直接用球体表示,实际情况也不会用到多边形,因为你根本就看不清它。下面就只要计算出头部圆心和子弹圆心之间的距离是否小于头部半径和子弹半径之和就可以了,这个计算公式我就不写了,学过立体几何的人都知道。如果头部和子弹之间的距离小于它们半径之和的话就说明你中弹了,就这么简单,你还会认为这个跟显示分辨率会有关吗?
CS分辨率和爆头率的关系,我认为是分辨率越低,你的瞄准精度就越低,也就是爆头率越低。所以大家还是用高分辨率为好,当然你的电脑要够劲才行。