Login with your google account

现在DOUFU中的碰撞测试是基于一个轮询机制,负责管理步调的类(PLAYGROUND)循环调用数组中的GameObject的步调函数,然后步调函数处理移动,得到下一个移动的坐标,将移动坐标传给负责碰撞测试的函数,询问是否可以移动。如果可以移动,则将GameObj的坐标设置为期待坐标,否则不改变。依此调用每个GameObject直到任务完成。

这样的设计有个严重的问题,就是碰撞测试执行的次数实在太多了,每个GameObject需要移动,就必须调用一次,并且碰撞测试函数将其与其他所有GameObject进行一次碰撞,这样导致随着GameObject数目N的上升,碰撞测试的调用次数将是N*(N-1),

另外一个问题是,这样的机制有可能导致游戏不太公平,因为先入数组的GameObject将获得更高的优先级别抢占指定的位置。

那么怎么可以减少碰撞的次数和解决上述问题呢?上次优化中已经考虑过这个问题,但是没有考虑到点子上,通过增大步长和只判断前方物体来减少运算量,这样的做法虽然可行但效果不明显。

经过在拉屎时候的思考,决定把机制改一改,使用预测机制来减少预算量,既是,每个GameObject先预测出可能移动的坐标,由碰撞测试程序进行一次性测试,最后把结果返回给各个对象,这样一来,由于进行计算时的坐标已经是预期坐标,不存在优先权问题,同时也大大减少了预算量,降低运算量到N +(N-1)+(N -2)。。。+ M (M > 1)。

同时还可以结合脏记录法,标记出没有移动过的物体,只计算移动过的GameObject。进一步降低运算量。

Tags: doufu

No Comments 2008-12-10 01:12:09 by Homyu.Shinn

Comments:

You can leave a comment on this post if you login