Pygame
Pygame是個遊戲開發的敲門磚,大家可以按照自己的喜好選擇是否學習Pygame。喜歡遊戲的同學可以學習Pygame,制作一個自己喜歡的小遊戲。因為是遊戲,我特意将背景設為了天空,希望大家在學習遊戲開發時遨遊夢想天空,體會遊戲快樂!
一、Pygame的安裝
下面我來給大家介紹如何安裝Pygame:首先我們使用win+R打開"運作"輸入cnd打開指令行,接着輸入
pip install pygame
等待下載下傳安裝即可完成。如果安裝過程出現錯誤,可以參考我的這篇文章關于解決pip install庫下載下傳慢(下載下傳出錯)或無法更新的問題。
二、Pygame最小開發架構
首先我們來看一下下面這段代碼:
import pygame,sys #引入
pygame.init() #初始化
screen = pygame.display.set_mode((600, 400)) #設定窗體大小
pygame.display.set_caption("跟着夜寒學Python") #設定标題欄
while True: #無限循環
for event in pygame.event.get():
if event.type == pygame.QUIT: #設定退出響應
sys.exit() #退出程式
pygame.display.update()
其運作結果如下圖:
可以看到它并沒有顯示任何東西,僅僅是在視窗欄有了标題變化。但這便是一個最小開發架構。
分為以下四個步驟:
(1)引入pygame、sys
把我們需要的第三方庫和功能引入
(2)初始化init()及設定
初始化遊戲,設定窗體,設定标題欄
(3)擷取事件并逐類響應
進入一個無限循環,先擷取時間并逐類相應
(4)重新整理螢幕
擷取并響應事件後重新整理效果
三、Pygame相關函數
sys.exit()
用于結束遊戲并退出
pygame.init()
對Pygame各子產品進行初始化
pygame.display.set_mode((width,height))
設定pygame的窗體大小,寬度和高度使用二值元組傳輸
pygame.display.set_caption()
設定窗體标題欄
pygame.QUIT()
pygame的退出事件
pygame.event.get()
從事件隊列中擷取事件
pygame.display.update()
對視窗進行重新整理,預設視窗全部繪制
四、Pygame小執行個體
在介紹第一個小例子之前我們需要先知道一些基本的知識。pygame的視窗采用笛卡爾坐标系,左上角為(0,0),橫軸向右是正方向,縱軸向下是正方向。其他需要知道的知識我會在函數的講解同時為大家講解。
先介紹一些函數
pygame.image.load()
引入系統相關路徑下的一張圖檔
<對象名>.get_rect()
pygame使用内部定義的surface對象表示所有載入的圖像,其中.get_react()方法傳回一個外切圖像的矩形rect對象。同時rect也有一些參數,這裡給大家講解:
top = y
bottom = w
left = x
right = u
width = u-x
height = w - y
<對象rect>.move(speed[x], speed[y])
對rect後的矩形對象形成偏移量為x和y的移動,偏移量為移動像素,整數。
screen.fill(color)
将視窗的背景填充為color色,采用RGB色彩體系。若不重新整理視窗背景預設為白色。
screen.blit(src, dest)
将一個圖像繪制在另一個圖像上, 即将src繪制到dest位置上,通過rect對象引導對圖像的繪制。
pygame.time.Clock()
建立一個Clock對象,用于操作時間。
clock.tick(framerate)
控制幀速率,即視窗重新整理速度,例如clock.tick(100)表示每秒鐘100次幀重新整理
pygame.KEYDOWN
通過這個函數pygame會知道這時發生了鍵盤敲擊事件,其中每個鍵的定義如下:
**pygame.K_UP()**上方向鍵
**pygame.K_DOWN()**下方向鍵
**pygame.K_LEFT()**左方向鍵
**pygame.K_RIGHT()**右方向鍵
下面我們編寫我們的第一個Demo(認真了解每一句話)
import pygame,sys
pygame.init() #初始化參數
size = width, height = 600,400 #設定窗體大小參數
speed = [1,1] #設定移動速度參數
BLACK = 0, 0, 0 #設定背景顔色參數RGB
screen = pygame.display.set_mode(size)
pygame.display.set_caption("跟着夜寒學Python")
ball = pygame.image.load("test.png") #導入圖檔,注意圖檔為自己下載下傳的,在自己機子上運作時注意更改
ballrect = ball.get_rect() #設定圖檔surface參數
fps = 300 #設定重新整理幀率參數
fclock = pygame.time.Clock() #建立clock.用于後續操作重新整理時間
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
speed[0] = speed[0] if speed[0] ==0 else (abs(speed[0]) -1 )* int(speed[0]/abs(speed[0]))
elif event.key == pygame.K_RIGHT:
speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1
elif event.key == pygame.K_UP:
speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1
elif event.key == pygame.K_DOWN:
speed[1] = speed[1] if speed[1] ==0 else (abs(speed[1]) -1 )* int(speed[1]/abs(speed[1]))
ballrect = ballrect.move(speed[0], speed[1])
if ballrect.left < 0 or ballrect.right > width:
speed[0] = -speed[0]
if ballrect.top < 0 or ballrect.bottom > height:
speed[1] = - speed[1]
screen.fill(BLACK)
screen.blit(ball, ballrect) #将圖檔放在rect切線矩形上
pygame.display.update() #重新整理
fclock.tick(fps)
這個小遊戲實作了一個圖檔在螢幕的四壁碰撞反彈(類似于windowsXP的屏保,大家可以自主複制代碼運作看看),使用者可以通過上下左右控制圖檔的運作速度,現在大家可以對照這些函數公式來了解這個執行個體小遊戲,有助于大家對Pygame的進一步認識。