1、引言
前面的文章中,咱們學習瞭如何畫出一個方塊,今天咱們來學習如何讓方塊運動起來。函數
2、讓方塊自行移動
咱們將前面文章出現的代碼進行修改,咱們將方塊的x座標改爲變量x,while循環語句裏每次將x的變量值增長5,運行程序後仔細看屏幕,會看到有個紅色方塊一閃而過(第一次看不清,嘗試多運行幾回)。這裏對前面代碼的理解很重要,雖然咱們一直看到的圖像是靜止的,但實際上每次都是整個屏幕從新被填充成白色(代碼SCREEN.fill((255, 255, 255))所作的事情),而後再從新畫了個新的矩形(代碼pygame.draw.rect(SCREEN, (255, 0, 0), (40, 30, 100, 50))所作的事情)。本節的代碼也是相似,在每次循環中x的值都是不同,因此矩形的位置也一直在變化,但因爲x的範圍很快超過屏幕的座標,因此後面就看不到紅色方塊了。oop
import pygame, sys # 初始化 pygame.init() # 設置屏幕的寬度,高度 SCREEN = pygame.display.set_mode((400, 300)) # 設置窗口的標題 pygame.display.set_caption('Hello World!') x = 10 # 遊戲主循環 while True: # main game loop for event in pygame.event.get(): # 處理退出事件 if event.type == pygame.QUIT: pygame.quit() sys.exit() # 將屏幕的背景填充成白色,瞭解下RGB三原色 SCREEN.fill((255, 255, 255)) # 調用 pygame.display.update() 方法更新整個屏幕的顯示 x = x + 5 pygame.draw.rect(SCREEN, (255, 0, 0), (x, 30, 100, 50)) pygame.display.update()
爲了控制屏幕刷新的速度,咱們在每次屏幕刷新後, 用pygame.time.delay函數進行延時,使程序稍微停一小會,運行後,咱們就能夠看到紅色方塊運行的速度比較慢些。學習
import pygame, sys # 初始化 pygame.init() # 設置屏幕的寬度,高度 SCREEN = pygame.display.set_mode((400, 300)) # 設置窗口的標題 pygame.display.set_caption('Hello World!') x = 10 # 遊戲主循環 while True: # main game loop for event in pygame.event.get(): # 處理退出事件 if event.type == pygame.QUIT: pygame.quit() sys.exit() # 將屏幕的背景填充成白色,瞭解下RGB三原色 SCREEN.fill((255, 255, 255)) # 調用 pygame.display.update() 方法更新整個屏幕的顯示 x = x + 5 pygame.draw.rect(SCREEN, (255, 0, 0), (x, 30, 100, 50)) pygame.display.update() pygame.time.delay(50)
pygame.time.delay() 暫停程序一段時間 delay(milliseconds) -> time, delay函數須要給一個int類型參數,表示延時多少毫秒ui
3、讓方塊來回移動
在上述代碼裏,目前的方塊是永遠往右邊走的,咱們嘗試增長這麼個功能,讓方塊走到右邊後,讓方塊改變方向,往左邊走。寫/看代碼前必定先用本身的話把事情描述清楚,咱們用本身的話描述下要作的事情:code
- 開始後,方塊一直在右走
- 走到右邊邊界後,方塊一直在左走 咱們先看如何判斷方塊走到右邊邊界,整個屏幕的寬度應該是多少呢?前面的代碼pygame.display.set_mode((400, 300))把屏幕的寬度設置爲400。因此咱們能夠看當x的座標爲400時,方塊奇左邊恰好跟屏幕右邊重疊,咱們認爲方塊出界,咱們能夠用x的座標是否大於400來判斷方塊是否走出界。 接着咱們來解決方塊向左走的功能。思考下方塊向右走跟向左有什麼區別?一個是x不斷加5,一個是x減5。 咱們能夠寫成x = x + dx,當向右走時dx爲5,當向左時,dx爲-5。代碼以下:
import pygame, sys # 初始化 pygame.init() # 設置屏幕的寬度,高度 SCREEN = pygame.display.set_mode((400, 300)) # 設置窗口的標題 pygame.display.set_caption('Hello World!') x = 10 dx = 5 # 遊戲主循環 while True: # main game loop for event in pygame.event.get(): # 處理退出事件 if event.type == pygame.QUIT: pygame.quit() sys.exit() # 將屏幕的背景填充成白色,瞭解下RGB三原色 SCREEN.fill((255, 255, 255)) # 調用 pygame.display.update() 方法更新整個屏幕的顯示 # 方塊恰好走出左屏幕 if x >= 400: dx = -5 x = x + dx pygame.draw.rect(SCREEN, (255, 0, 0), (x, 30, 100, 50)) pygame.display.update() pygame.time.delay(50)
4、 練習題
- 原來的方塊是要徹底走出屏幕右邊後才反彈,嘗試改爲方塊右邊碰到屏幕右邊就反彈。
- 目前方塊走到左邊不會反彈,增長代碼,使方塊回到左邊後,碰到屏幕左邊邊界反彈往右走。
- 把方塊橫向運動改爲上下移動。