我們知道,游戲里的動畫就是在短暫的時間里讓窗口畫面不斷的變換圖像。通過視覺的延遲來欺騙眼鏡,讓我們以為看到的是一個連續的動畫。
想象我們的程序窗口有6個像素寬、1個像素高。除了4, 0位置的像素是黑色的外,所有的像素顏色都是白色的。窗口是這個樣子:

如果我們同時把第3,0的位置改為黑色、4,0位置改為白色,窗口會展示成下面的樣子:

對于用戶來說,他看到的就是第四個黑色移動到了第三個黑色位置上。如果我們把2,0改為黑色,那真個程序給用戶看起來就是一個動畫了。

對我們來說這是對話,但是對計算機來講,它就是在很短的時間里渲染了三張不同圖片而已。
下面,我們來做個例子演示貓捉老鼠的動畫:

看代碼:
```
import pygame, sys
from pygame.locals import *
pygame.init()
FPS = 30 # frames per second setting
fpsClock = pygame.time.Clock()
# set up the window
DISPLAYSURF = pygame.display.set_mode((400, 300), 0, 32)
pygame.display.set_caption('Animation')
WHITE = (255, 255, 255)
# 加載一個貓的圖片,這個后續會講
catImg = pygame.image.load('cat.png')
catx = 10
caty = 10
direction = 'right'
while True: # the main game loop
DISPLAYSURF.fill(WHITE)
if direction == 'right':
catx += 5
if catx == 280:
direction = 'down'
elif direction == 'down':
caty += 5
if caty == 220:
direction = 'left'
elif direction == 'left':
catx -= 5
if catx == 10:
direction = 'up'
elif direction == 'up':
caty -= 5
if caty == 10:
direction = 'right'
# 將圖片渲染到窗口上
DISPLAYSURF.blit(catImg, (catx, caty))
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
# 更新窗口
pygame.display.update()
# 每秒多少楨
fpsClock.tick(FPS)
```
## 動畫每秒的楨數和pygame.time.Clock對象
動畫幀率是指我們程序每秒刷新圖片的次數,通常被稱為FPS。低幀率會讓游戲顯得很卡,我們一般設置為30即可。
`pygame.time.Clock` 對象幫助我們指定程序的最大幀率,如果我們不設置這個參數,游戲在一些電腦上會運行過快,導致用戶反映不過來。我們調用Clock對象的tick方法來指定游戲幀率。
```
fpsClock = pygame.time.Clock()
fpsClock.tick(FPS)
```
需要注意的是,`fpsClock.tick(FPS)` 方法通常放在我們游戲主循環的最后一句,也就是`pygame.display.update()`的下面。這樣,程序在每一次渲染畫面的時候會跟進全面渲染畫面的時間來調整當前渲染時間。
**阿達老師-孩子身邊的編程專家**
*完整課程請關注阿達老師,主頁里有完整的課程目錄和觀看地址*
- 課程介紹
- 搭建環境
- 什么是計算機
- 程序是怎么運行的
- 安裝python
- 項目實例-安裝IDE
- 變量和簡單數據類型
- 數據&變量
- 數字
- 字符串
- 布爾類型
- 項目實例
- 容器-列表
- 容器
- 列表
- 項目實例
- 容器-字典
- 定義字典
- 項目實例
- 數據類型總結
- 條件語句
- python條件語句
- 項目實例
- 循環語句
- for循環
- while循環
- 項目實例
- 函數
- 5.0函數定義
- 5.2函數實戰
- 6.文件系統
- 6.1 文件系統介紹&python查找文件
- 6.2 用python讀寫文件
- 7. python操作時間
- 8.面向對象
- 8.1 類和對象
- 8.2 繼承和重寫
- 8.3 面向對象項目實戰
- 9 GUI編程
- 9.1 GUI基礎
- 9.2 備忘清單GUI版
- 10.網絡
- 10.1 網絡的發展
- 10.2 python http
- 11.web開發
- 11.1 web基礎&HTML
- 11.2 CSS&JavaScript
- 11.3 網頁計算器
- 11.3 網站開發實戰-播客搭建
- 11.3 python-web
- 12. 項目實戰-數據處理
- 13. 項目實戰-AI入門
- 13.1 環境搭建
- 心得
- 13.2 Tensorflow的瓜怎么吃
- 14 pygame
- 14.1 pygame Helloworld
- 14.4 pygame 動畫基礎 Animation
- 從0開始學python第14.5節 pygame 加載圖片和聲音
- 從0開始學python第14.6節 pygame.sprite(上)
- 14.7 pygame.sprite模塊(下)
- 14.8 pygame射擊游戲(一)
- pygame射擊游戲(二)
- 14.8 pygame射擊游戲(三)
- 14.8 pygame射擊游戲(四)
- 14.8 pygame射擊游戲(五)