结合在下的第一款程序"打砖块" 中的碰撞,在此做一下剖析.
记得刚开始写的时候,碰撞是最大的难点. 当时我和一个小网友一起在研究这个碰撞. 可不是运动时有影子,就是不支持连续碰撞.
直到碰到一位baidu上的朋友. 经过他的指点迷津,终于有些感悟了.
接下来简单谈谈我的感想:
首先要实现碰撞(无论什么图形) , 你必须要了解它的线路, 这是必须的! 当你了解,并且设置此物体的运动路线后,
遍可以开始进行下一步实施. 我的打砖块我设置的是小球走对角线路. 就是所谓的取反.
首先小球是用Eillpse() 函数绘制的,使用CRect rcClient; GetClientRect(rcClient); //得到客户区大小
小球的运动,我们是使用坐标递增或递减的方式.
qiu.left+=qiu.velX;
qiu.right+=qiu.velX;
qiu.top-=qiu.velY;
qiu.bottom-=qiu.velY;
//对了,在此之前需要声明两个变量,分别是小球的X方向速度,和Y方向速度, 用于后面的取反工作.
当我们得到客户区大小的时候. 就可以开始对其碰撞进行测试了 .
// qiu 是小球的意思,当小球和客户区的左边和右边碰撞时. 把小球的X方向速度取反. 上面下面碰撞Y方向取反.
if(qiu.left<=rcClient.left || qiu.right>=rcClient.right)
{
qiu.velX=-qiu.velX;
}
if(qiu.top<=rcClient.top || qiu.bottom>=rcClient.bottom)
{
qiu.velY=-qiu.velY;
}