开发游戏免不了要计算两个坐标之间的距离,计算两点之间的距离我们可以用勾股定理,比如说A代表直角三角形的一条直角边,B代表另一条直角边,C代表斜边,得到公式A²+B²=C²。C也就是两点之间的距离,根据公式可计算出C=根号(A²+B²);
以上就是常用的方法之一,但是世嘉MD机能有限,又是平方又是开方的,性能开销太大了,现在我给大家说一个简单的方法,只需要几句代码就能计算出两点之间的距离了,而且计算速度比上述方法快很多倍,虽然这个方法得到的结果不是很精确,但两个点水平或者垂直的时候是没有误差的,不怎么影响计算。
代码如下:
//u32是SGDK里定义的一个整数类型,相当于unsigned long
//Vect2D_s32是SGDK里定义的一个向量结构体,包含x和y两个值,而且x和y都是s32类型,相当于long类型u32 get_approx_distance(Vect2D_s32 _p1, Vect2D_s32 _p2)
{// x的距离u32 dx = abs(_p1.x - _p2.x);// y的距离u32 dy = abs(_p1.y - _p2.y);//返回:最大值 + ( 最小值 >> 2 )return max(dx, dy) + (min(dx, dy) >> 2);
}
至于这个原理是啥我也不懂,我也是从国外网站找到的,知道原理的大神可以指点一下,这个方法简单明了,记起来也很容易。
这是一个讲解类似原理的文档:https://www.flipcode.com/archives/Fast_Approximate_Distance_Functions.shtml