easyX实现自由落体小球
1. 要实现自由落体,首先得实现匀速下落
#include<graphics.h> //图形库头文件
#include<conio.h>
#include<cstdio>
#define WIDTH 400 //窗口宽度
#define HEIGHT 600 //窗口高度
int main()
{
//定义并初始化小球坐标
float ballX = WIDTH / 2;
float ballY = 10;
//创建窗口
initgraph(WIDTH, HEIGHT);
while (1)
{
ballY++; //改变小球的y坐标
cleardevice(); //清屏
fillcircle(ballX, ballY, 10); //绘制小球
Sleep(10); //暂停10毫秒
}
_getch(); //等待按键输入(卡屏作用)
closegraph(); //关闭窗口
return 0;
}
2.然后在匀速的基础上实现加速运动
(只需要实现y方向的增量不断改变即可)
#include<graphics.h>
#include<conio.h>
#include<cstdio>
#define WIDTH 400 //窗口宽度
#define HEIGHT 600 //窗口高度
int main()
{
//定义并初始化小球坐标
float ballX = WIDTH / 2;
float ballY = 10;
//定义小球初始下落速度
float vy = 0.0;
//定义小球下落加速度
float g = 0.5; //y方向的增量
//创建窗口
initgraph(WIDTH, HEIGHT);
while (1)
{
//实现加速下落
//改变下落速度
vy = vy + g;
//改变Y方向坐标
ballY = ballY + vy;
//做反弹处理
if (ballY >= 590)
vy = -0.95*vy; //改变vy的方向,加一点阻力
//做下边界处理
if (ballY > 590)
ballY = 590;
cleardevice(); //清屏
fillcircle(ballX, ballY, 10); //绘制小球
Sleep(100); //暂停100毫秒
}
_getch();
closegraph();
return 0;
}
要点一: 通过增量改变每一次 y 方向上值改变的不同
要点二: 下边界处理, 当 y >窗口高度 - 小球半径 时需要将 y 坐标置为 窗口高度 - 小球半径
要点三: vy的反向