购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 小球的自由落体

本节讲解如何实现小球的自由落体运动效果,完整代码参见配套资源中的2-2.cpp,扫描右侧二维码观看视频效果“2.2 小球的自由落体”。下面对2-2.cpp中的一些关键内容进行讲解,代码对应的行号是它们在2-2.cpp中的行号。

2.2 小球的自由落体

首先用一个小球表示游戏中的小鸟,定义结构体记录小球圆心的横、纵坐标 x y ,纵轴方向的速度vy,半径radius,代码如下。

2-2.cpp

 8    struct Bird // 小鸟结构体  
 9    {  
10        float x, y, vy, radius; // 小球圆心坐标(x,y)、y轴方向的速度vy、半径
    radius  
11    };  

在程序开头,使用宏定义的形式设定画面的宽度WIDTH、高度HEIGHT、重力加速度G,代码如下。

2-2.cpp

 4    #define WIDTH 800  // 游戏画面宽度  
 5    #define HEIGHT 600 // 游戏画面高度  
 6    #define G  0.3  // 重力加速度  

在while循环语句中,首先根据重力加速度G计算速度vy,然后利用vy更新小球圆心的纵坐标y,从而实现小球加速下落的效果,代码如下。

2-2.cpp

24        while (1) // 一直循环  
25        {  
26            bird.vy = bird.vy + G;  // 根据重力加速度更新小球在y方向的速度  
27            bird.y = bird.y + bird.vy;  // 根据小球在y方向的速度更新其圆心
    的纵坐标  

当小球碰到画面的下边界时,重新设置小球圆心的纵坐标y,代码如下。

2-2.cpp

29            if (bird.y >= HEIGHT - bird.radius)  // 如果小球碰到画面的下边界  
30            {  
31                bird.y = HEIGHT / 6;  // 重新设置小球圆心的纵坐标  
32                bird.vy = 0;  // 小球在y方向的初始速度设为0  
33            }  

更新小球的速度和位置后,依次执行清空画面、绘制新位置的小球、暂停10毫秒,即可实现小球重复加速下落的动画效果,代码如下。

2-2.cpp Edi+c6Ztx+mXjiE30p8GQDTk2CbSiermBNMZDhlMUtl+D8/5i1PPLU8FvUh9hcy0

35            cleardevice();  // 清空画面  
36            fillcircle(bird.x, bird.y, bird.radius);  // 绘制小球  
37            Sleep(10);  // 暂停10毫秒  
点击中间区域
呼出菜单
上一章
目录
下一章
×