首页 > 代码库 > libgdx, contact 接触的调用情况分析

libgdx, contact 接触的调用情况分析

 

背景:想要实现body1与body2接近到一个距离s后,将两者合并。

想法1:调用在回调函数:beginContact 中完成,但最终没能实现想要的效果。这个函数只在fixture1与fixture2发生接触的瞬间被调用。只要两个fixture没有分离,无论怎么移动body2,这个函数是不会再被调用的了,所以我的想法失败了。

endContact函数,在两个fixture分离时被调用一次;

preSolve,postSolve函数在两fixture碰撞时调用,且是成对出现。

如果想要“两个fixture有接触时就进行合并的效果”,那可以使用想法1。且在实验时发现,当beginContact函数被调用时,body1与body2之间的距离s的值不完全相同。产生不同的原因有2:第一,这个接触的时机与step()函数有关;第二,我计算的是两个body之间的position的距离,而beginContact函数被调用的时机是两个fixture的接触。换句话说,是两个圆形的话,则beginContact被调用时,这个距离的值应该是一样的。

 

想法2:在body2被拖动的过程中判定body1与body2的距离s,然后判断是否满足需求;

 

想法3:在渲染函数中判定body1与body2的距离s,在step函数之后;

个人偏向使用这种,因为body的属性修改及body对象的删除都在这里进行操作,否则可能会异常。

但这个渲染函数的调用是相当频繁的,则为了提高性能,在beginContact与endContact之间进行距离s的判定!