學習資料:https://www.bilibili.com/video/BV1bE411p7Ue?p=1,快來給這個前鋒教育UP主點個贊🚀
視頻講的更全,可以在這裏看
【零基礎 Python體驗課】第四季 pygame遊戲開發
Pygame學習筆記1——遊戲基礎及添加圖片
內容純手寫,轉載請附上鍊接!
Pygame有很多的模塊,不同的模塊專注於不同的功能。Pygame是一個Python的第三方遊戲製作模塊,可以製作一些比較簡單的遊戲,但是如果真正開發2D、3D遊戲,Pygame就不很實用了,Python可以使用PyQt,但是通常開發大型遊戲,比如王者榮耀這種功能超多、高渲染的遊戲,用的是Unity之類的2D、3D遊戲,都需要使用C系列的語言,比如Unity需要學會C#、Qt要C++。
Pygame在製作小遊戲娛樂,哄小孩範疇還是可以的
以下是一些Pygame的類,講不完的,講完我也該倒地了
模塊名 | 功能 |
---|---|
pygame.cdrom | 訪問光驅(比較古老,現代電腦幾乎都沒有光驅了) |
pygame.cursors | 加載光標(加載光標,更改光標的形狀) |
pygame.display | 訪問顯示設備(所有遊戲都有界面的) |
pygame.draw | 繪製形狀、線和點(以畫的形式展現) |
pygame.event | 管理事件(檢測事件,讓遊戲靈活,鼠標鍵盤控制遊戲) |
pygame.font | 使用字體(遊戲的文字字體) |
pygame.image | 加載和存儲圖片(遊戲中最多的元素) |
pygame.joystick | 使用遊戲手柄🕹或者類似的東西(現在很少使用了) |
pygame.key | 讀取鍵盤按鍵(通過鍵盤控制比如WASD) |
pygame.mixer | 聲音(通常有兩種:背景音樂和音效效果) |
pygame.mouse | 鼠標(鼠標相關功能) |
pygame.movie | 播放視頻(例如第五人格人物介紹、廣告) |
pygame.music | 播放音頻(例如第五人格監管者追擊音樂) |
pygame.overlay | 訪問高級視頻疊加(視頻高級操作) |
pygame.rect | 管理矩形區域(矩陣-範圍相關) |
pygame.sndarray | 操作聲音數據(音頻高級操作) |
pygame.sprite | 操作移動圖像(比如人物) |
pygame.surface | 管理圖像和屏幕(看得到的對象) |
pygame.surfarray | 管理點陣圖像數據(先不管,高級操作) |
pygame.time | 管理時間和幀信息(管理時間信息,時間控制) |
pygame.transform | 縮放和移動圖像(遊戲界面圖像的變形) |
1、遊戲最小系統
Pygame有幾步操作
- 首先導入pygame的庫
- 初始化操作(初始化遊戲,初始化硬件)
- 初始化爲一次性初始化,初始很多東西,比如鼠標鍵盤,也可以一開始不寫初始化,等到需要某個部分時分開初始化
- 創建遊戲窗口(創建界面,沒有界面怎麼玩)
- 使用
display
方法,設置寬高,設置好的界面需要用一個對象保存,類似於root = Tk()
,窗口種子
- 使用
- 讓遊戲保持一直運行的狀態(類似Tk的消息循環,叫game loop)
- 如果不加入循環,運行程序會瞬間結束,所以需要一個死循環,結束遊戲就跳出
- 檢測事件,比如鼠標、鍵盤的事件,用for循環遍歷
# __author__=="thomas"
import pygame #導入庫
# 1.初始化操作
pygame.init()
#2. 創建遊戲窗口
window = pygame.display.set_mode((400, 600))
# 3.讓遊戲保持一直運行的狀態
# 寫個死循環吧 game loop (遊戲循環)
while True:
# 4.檢測事件
for event in pygame.event.get(): #獲取事件
pass
代碼執行結果就是這樣
1窗口標題
下面介紹一下,我們將窗體賦給了一個變量——window
,而上方的關閉、最小化、全屏、標題等操作是由操作系統控制的,window
控制的窗體內部。於是設置標題不用window
操控,還是display
類的方法叫做set_caption()
# __author__=="thomas"
import pygame #導入庫
# 1.初始化操作
pygame.init()
#2. 創建遊戲窗口
window = pygame.display.set_mode((400, 600))
# 設置遊戲標題,標題
pygame.display.set_caption("Thomas的遊戲")
# 3.讓遊戲保持一直運行的狀態
# 寫個死循環吧 game loop (遊戲循環)
while True:
# 4.檢測事件
for event in pygame.event.get(): #獲取事件
pass
2關閉窗口
這個生成的窗口可以最小化,但是不可以關閉,Mac和Windows都這樣,點擊無效,原因是沒有退出無限循環,可以在控制檯內按Ctrl+C
強制中斷,但是一般用戶不會這麼用。
那麼點擊叉子是一個事件
需要在for循環中處理事件,這個事件叫做pygame.QUIT
,下面提供兩個方法
方法一:關閉當前線程——exit()
,由於當前程序只有這一個線程,所以使用exit()
退出當前線程
while True:
# 4.檢測事件
for event in pygame.event.get(): #獲取事件
# 檢測關閉按鈕被點擊的事件
if event.type == pygame.QUIT:
exit() #結束這一個線程
方法二:將while True
改爲False
,所以可以把True換成一個變量,比如Flag?
flag = True #循環控制
while flag:
# 4.檢測事件
for event in pygame.event.get(): #獲取事件
# 檢測關閉按鈕被點擊的事件
if event.type == pygame.QUIT:
#exit() #結束這一個線程
flag = False
成功關閉!💪但是真正開發大型遊戲絕不可能結束這麼簡單,結束之前需要很多事情,可能要很多函數爲了結束,比如要保存日誌數據,你的進度、等級、闖了多少關。
2、添加內容
第一步還是遊戲最小系統,然後添加內容可以寫在兩個地方,第一個是創建遊戲窗口之後和無限循環之前,這個地方寫遊戲開始頁面靜態效果,第二個是在循環中寫幀的刷新(動畫,這裏不涉及),當然也可以寫在類、函數中。
1添加圖片
圖片咱們先整靜態的,放在靜態效果中,首先需要一個圖片,我找了一個飛機的圖片,在文章的最後面
素材網站(圖標圖片):https://www.easyicon.net
插入圖片步驟:
- 加載圖片(load,打開圖片)
- 渲染圖片(用window,光打開無法顯示)
- 使用window.blit(),
blit(渲染對象,座標)
- 座標是以屏幕左上角爲(0, 0),有些引擎不一樣
- 使用window.blit(),
- 刷新顯示頁面(不刷新無法顯示)
- pygame有一個特點,你放置了部件,但是必須刷新界面可能顯示出來,不知道大家寫沒寫過前端,寫完HTML必須保存,再刷新瀏覽器才能顯示
- 刷新可以一次更改很多項只刷新一次
- 操作圖片🎛
- 獲取圖片大小:
img.get_size()
- 旋轉和縮放-----形變:
pygame.transform.scale(img, (100, 100))
,參數:scale(縮放對象,目標大小)
,但是如果不按照比例縮小會變形pygame.transform.rotozoom(img,)
,參數:rotozoom(縮放/旋轉對象,旋轉角度,縮放比例)
,也會發生形變
- 獲取圖片大小:
實例代碼:
# __author__=="thomas"
import pygame
pygame.init()
window = pygame.display.set_mode((600, 600))
pygame.display.set_caption("顯示圖片")
# ============遊戲開始頁面靜態效果==========
#1.加載圖片
img = pygame.image.load("Img/Plain.png") #如果你要嘗試,要麼圖片放在原位,要麼改變路徑
#2.渲染圖片
#blit(渲染對象,座標)
window.blit(img, (0, 1))
#3.刷新顯示頁面
#1.第一次刷新用它 pygame.display.flip()
#2.不是第一次刷新
pygame.display.update() #刷新
#========================================
flag = True
while flag:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
注:如果你想使用這個代碼,需要改變圖片路徑
網上下載的圖片難免會尺寸不合適,可以在easyicon下載時點擊詳情找合適尺寸,也可以下載後使用工具
- windows畫圖,點擊重新調整尺寸
- WPS圖片,工具超多(VIP更多)
前面介紹的transform也差不多了,然後get_size()有兩個返回值,可以使用兩個變量接收,實例代碼如下,重點在於雙等線之間
# __author__=="thomas"
import pygame
pygame.init()
window = pygame.display.set_mode((600, 600))
pygame.display.set_caption("顯示圖片")
# 設置背景顏色
window.fill((255, 255, 255))
# ============遊戲開始頁面靜態效果==========
#1.加載圖片
img = pygame.image.load("Img/Plain.png") #如果你要嘗試,要麼圖片放在原位,要麼改變路徑
#2.渲染圖片
#blit(渲染對象,座標)
window.blit(img, (0, 1))
w, h = img.get_size() #獲取寬高
#print(w, h) 輸出測試
window.blit(img, (600-w, 600-h)) #放在右下角
new1 = pygame.transform.scale(img, (100, 200)) #縮放爲x=100,y=200,變形了
window.blit(new1, (210, 0)) #靠右一點放置
new2 = pygame.transform.rotozoom(img, 0, 0.5) #不旋轉爲0,縮放百分比爲0.5
window.blit(new2, (0, 200))
#==================================
#3.刷新顯示頁面
#1.第一次刷新用它 pygame.display.flip()
#2.不是第一次刷新
pygame.display.update() #刷新
flag = True
while flag:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
縮放比例爲0~1,0.5就是50%
旋轉是按照度數向左旋轉,45就是
2設置背景顏色
接下來我們需要設置窗口背景,如果是windows操作系統背景是黑色的,Mac是白色的,Mac看起來白白的渾然一體,其實是透明,一旦往上添加東西,就會變成黑色。
# 設置背景顏色
window.fill((255, 255, 255))
這應該是最小系統裏的,更改後代碼如下
# __author__=="thomas"
import pygame
pygame.init()
window = pygame.display.set_mode((600, 600))
pygame.display.set_caption("顯示圖片")
# 設置背景顏色
window.fill((255, 255, 255))
# ============遊戲開始頁面靜態效果==========
#1.加載圖片
img = pygame.image.load("Img/Plain.png") #如果你要嘗試,要麼圖片放在原位,要麼改變路徑
#2.渲染圖片
#blit(渲染對象,座標)
window.blit(img, (0, 1))
#3.刷新顯示頁面
#1.第一次刷新用它 pygame.display.flip()
#2.不是第一次刷新
pygame.display.update() #刷新
flag = True
while flag:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
pygame的顏色是RGB系統,tkinter是十六進制和顏色名系統
3、資源
附上這個飛機的圖片
記得要保存在Img/Plain.png
的位置,這樣不需要改代碼
4、預告
下一節課將會講到往窗口中添加文字