Pygame入門——遊戲基礎及插入圖片


學習資料: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),有些引擎不一樣
  • 刷新顯示頁面(不刷新無法顯示)
    • pygame有一個特點,你放置了部件,但是必須刷新界面可能顯示出來,不知道大家寫沒寫過前端,寫完HTML必須保存,再刷新瀏覽器才能顯示
    • 刷新可以一次更改很多項只刷新一次
  • 操作圖片🎛
    1. 獲取圖片大小:img.get_size()
    2. 旋轉和縮放-----形變:
      1. pygame.transform.scale(img, (100, 100)),參數:scale(縮放對象,目標大小),但是如果不按照比例縮小會變形
      2. 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、預告

下一節課將會講到往窗口中添加文字

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章