擅长:python、mysql、java
<p>任意形状的碰撞检测通常非常棘手,因为您必须找出是否有任何像素发生碰撞。</p>
<p>用圆圈其实更容易。如果有半径为r1和r2的两个圆,则如果中心之间的距离小于r1+r2,则会发生碰撞。</p>
<p>两个中心(x1,y1)和(x2,y2)之间的距离可以计算并比较为:</p>
<pre><code>d = sqrt((y2-y1) * (y2-y1) + (x2-x1) * (x2-x1));
if (d < r1 + r2) { ... bang ... }
</code></pre>
<p>或者,正如jfclavette所指出的,平方根是昂贵的,所以最好使用简单的运算来计算:</p>
<pre><code>dsqrd = (y2-y1) * (y2-y1) + (x2-x1) * (x2-x1);
if (dsqrd < (r1+r2)*(r1+r2)) { ... bang ... }
</code></pre>
<p>计算新的运动矢量(给定对象的(x,y)随时间变化的速率)时会遇到棘手的问题,因为需要考虑当前的运动矢量和接触点。</p>
<p>我认为,作为第一个切入点,您应该反转运动向量,以测试碰撞检测是否首先起作用。</p>
<p>然后再问另一个问题——最好把个别问题具体化,这样答案才有针对性。</p>