官术网_书友最值得收藏!

2.2 小球的自由落體

本節講解如何實現小球的自由落體運動效果,完整代碼參見配套資源中的2-2.cpp,掃描右側二維碼觀看視頻效果“2.2 小球的自由落體”。下面對2-2.cpp中的一些關鍵內容進行講解,代碼對應的行號是它們在2-2.cpp中的行號。

2.2 小球的自由落體

首先用一個小球表示游戲中的小鳥,定義結構體記錄小球圓心的橫、縱坐標xy,縱軸方向的速度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

35            cleardevice();  // 清空畫面
36            fillcircle(bird.x, bird.y, bird.radius);  // 繪制小球  
37            Sleep(10);  // 暫停10毫秒  
主站蜘蛛池模板: 韶山市| 新巴尔虎右旗| 大庆市| 安多县| 砀山县| 金溪县| 武汉市| 那曲县| 新源县| 句容市| 鲁山县| 洛阳市| 玉林市| 上林县| 彝良县| 两当县| 离岛区| 辽源市| 连南| 莫力| 盐亭县| 合江县| 呈贡县| 林周县| 乐安县| 高雄县| 湘潭县| 高阳县| 昆明市| 怀仁县| 焦作市| 彭阳县| 吐鲁番市| 乐昌市| 襄汾县| 图们市| 湛江市| 金沙县| 磐石市| 南昌市| 枣庄市|