讀古今文學網 > 父與子的編程之旅:與小卡特一起學Python > 16.10 讓球翻轉 >

16.10 讓球翻轉

現在來看讓球一直移動的第二種選擇。不是讓它在屏幕邊界反彈,而是讓它翻轉。這表示,球在屏幕右邊界消失時,又會在左邊界重新出現。

為了讓問題更簡單一些,我們先來看只是水平移動球的情況。程序見代碼清單 16-16。

代碼清單 16-16 利用翻轉移動沙灘球圖像

第 17 行(ifx>screen.get_width:) 和第 18 行(x=0) 中,我們檢查球什麼時候達到窗口的右邊界,並把它移回(或者翻轉)到左邊界。

你可能注意到了,球在右邊出現時,它會「突然跳到」[0, 50]。可能更自然的做法是從屏幕後面「滑入」。把第 18 行(x=0)改為 x=-90,再看看是不是有差別。

你學到了什麼

哇 ! 這一章內容真多!在這裡,你學習了以下內容。

  • 如何使用 Pygame。

  • 如何創建圖形窗口並在其中畫一些形狀。

  • 如何設置計算機圖片中的顏色。

  • 如何把圖像複製到圖形窗口。

  • 如何完成圖像動畫,包括將圖像移動到新位置時還要從原位置「擦掉」。

  • 如何讓沙灘球在窗口中「反彈」。

  • 如何讓沙灘球在窗口中「翻轉」。

測試題

1. RGB 值 [255, 255, 255] 會得到什麼顏色?

2. RGB 值 [0, 255, 0] 會得到什麼顏色?

3. 使用哪個 Pygame 方法來畫矩形?

4. 使用哪個 Pygame 方法來畫線將多個點連接在一起?

5. 「像素」是什麼意思?

6. 在 Pygame 窗口中,位置 [0, 0] 在哪裡?

7. 如果 Pygame 窗口寬為 600 像素,高為 400 像素,下圖中哪個字母位於位置 [50, 200] ?

8. 圖中哪個字母位於位置 [300, 50] ?

9. 使用哪個 Pygame 方法可以將圖像複製到表面(如顯示表面)?

10. 「移動」一個圖像或完成動畫時有哪兩個主要步驟?

動手試一試

1. 我們討論了畫圓和矩形。Pygame 還提供了一些方法來畫直線、弧、橢圓和多邊形。試著在程序中使用這些方法畫一些其他形狀。

可以在 Pygame 文檔(www.pygame.org/docs/ref/draw.html)中瞭解這些方法的更多信息。如果你不能上網,在你的硬盤上也可以找到這個文檔(已經隨 Pygame 安裝),但可能很難找到。可以搜索硬盤尋找一個名為 pygame_draw.html 的文件。

也可以使用 Python 的幫助系統(我們在第 6 章的最後討論過)。有一點是 SPE 做不到的,它沒有提供一個交互 shell,所以要啟動 IDLE,鍵入下面的命令:

>>> import pygame>>> helphelp> pygame.draw  

你會得到一個列表,其中會列出不同的繪製方法以及每種方法的一些解釋。

2. 試著修改使用沙灘球圖像的示例程序,來使用不同的圖像。可以在 \examples\images 文件夾中找到一些示例圖像,或者可以下載或自己畫圖像,還可以使用數碼照片。

3. 試著改變代碼清單 16-15 或代碼清單 16-16 中的 x_speedy_speed 值,讓球移動得更快或更慢,並在不同方向上移動。

4. 試著修改代碼清單 16-15,讓球在隱形的牆或地板(不是窗口邊界)上反彈。

5. 在代碼清單 16-5 到代碼清單 16-9 中(現代藝術、正弦曲線和神秘圖片程序),試著把 pygame.display.flip 代碼行移到 while 循環中。為此,只需加 4 個空格縮進。在這行代碼後面(仍然在 while 循環內部),用下面這行代碼增加一個延遲,看看會發生什麼:

pygame.time.delay(30)