windows程序设计做的练习。
高中的时候就是靠物理吃饭的,学了windows编程很期待能用一用。
这个程序就是模拟了许多刚体小球在平面上运动,当两球撞在一起时按照动量守恒定理改变两球的运动速度。地面和小球之间也有摩擦力,所以小球会不断减速,直到静止。
程序运行起来也不错,感觉很真实。为了达到更好的视觉效果我用小球的半径直接作为小球的质量来使用,而不是半径的平方。那样的话可能大球被撞后速度改变不大。
我把源代码传到CSDN下载中心了,【点击这里】进入下载页面。
这里简单谈一下刚学的一个技术:双缓冲。解决屏幕闪烁问题。
刚学MFC,当需要刷新页面的时候常用的方法是调用View窗口的Invalidate()方法,强迫窗口客户区失效,操作系统将发送一条PAINT消息给View窗口,从而使程序调用OnPaint()方法,达到重绘窗口的目的。
你会发现,每次重绘时,无论内容多少,窗口总是会出现闪烁现象。这时由于在调用OnPaint()之前,操作系统会将View窗口用背景色刷一次。这个过程不够快,能够被人眼观察到。这个重绘的思路是“擦除->重绘”两个步骤。特别是做了一个游戏循环的时候,你会看见画面不停地闪……
双缓冲的基本思路就是,当要刷新页面时,先在内存中建立一个位图,将新画面在内存中绘制完成后,再拷贝到屏幕上,而不用擦除屏幕上的画面。这样就消除了“擦除”带来的闪烁感,画面看起来很干净。
具体实现都放在代码中了,注释也比较详细~