400-650-7353
您所在的位置:首頁 > IT干貨資料 > python > 【Python基礎(chǔ)知識】Pygame的基本使用——游戲循環(huán)和模板

【Python基礎(chǔ)知識】Pygame的基本使用——游戲循環(huán)和模板

  • 來源:優(yōu)就業(yè)
  • 2021-09-28 09:44:34
  • 閱讀()
  • 分享
  • 手機(jī)端入口

每個(gè)游戲的核心控制流程都是循環(huán),稱為游戲循環(huán)。游戲循環(huán)不斷地反復(fù)運(yùn)行,完成使游戲正常運(yùn)行所需的工作。每迭代一次游戲循環(huán)稱為一幀。

Pygame框架游戲循環(huán)中發(fā)生的事情可以分為三種不同的類別。

①事件:需要游戲做出響應(yīng)的所有內(nèi)容。例如,在鍵盤上按下的鍵,在鼠標(biāo)上點(diǎn)擊的鍵等。

②更新游戲:此框架上需要更改的所有內(nèi)容。例如,如果角色懸空,那么需要使用重力將其拉下來;如果兩個(gè)對象相遇,那么需要發(fā)生爆炸。

③渲染:將所有內(nèi)容繪制在屏幕上。例如,播放器需要查看的背景、角色、菜單或其他任何內(nèi)容,都必須在屏幕上正確的位置繪制。

游戲循環(huán)的關(guān)鍵是控制整個(gè)游戲循環(huán)的運(yùn)行速度,即FPS,它表示每秒的幀數(shù),這意味著游戲循環(huán)每秒應(yīng)該發(fā)生多少次。如果控制不好FPS,游戲就會(huì)運(yùn)行得過快或過慢。

(1)創(chuàng)建Pygame模版

編寫一個(gè)簡單的Pygame程序,該程序除了打開游戲窗口并運(yùn)行游戲循環(huán)外什么也不做。

首先導(dǎo)入所需的Pygame庫,并設(shè)置游戲的全局選項(xiàng)變量:

  1. import pygame 
  2.  
  3. WIDTH = 300   # 游戲窗口的寬度 
  4. HEIGHT = 420   # 游戲窗口的高度 
  5. FPS = 30   # 每秒的幀數(shù) 

接下來創(chuàng)建游戲窗口:

  1. # 初始化Pygame并創(chuàng)建游戲窗口 
  2. pygame.init() 
  3. screen = pygame.display.set_mode((WIDTH, HEIGHT)) 
  4. pygame.display.set_caption('Demo Game')   # 設(shè)置游戲標(biāo)題 
  5. clock = pygame.time.Clock() 

先調(diào)用pygame.init()啟動(dòng)Pygame并將其初始化;再調(diào)用pygame.display.set_mode()創(chuàng)建游戲窗口screen,其參數(shù)是一個(gè)元組,表示該游戲窗口的寬度和高度;最后調(diào)用pygame.time.Clock()創(chuàng)建時(shí)鐘對象clock,以便能夠確保游戲按照設(shè)定好的FPS運(yùn)行。

然后開始編寫游戲循環(huán):

  1. # 游戲循環(huán) 
  2. running = True 
  3. while running: 
  4.     pass 

這是游戲循環(huán)的框架代碼,它是由變量running控制是否執(zhí)行的while循環(huán),如果希望游戲循環(huán)結(jié)束,那么只需將running設(shè)置為False即可。

(2)渲染部分

目前示例代碼中僅僅演示的是用純色填充屏幕。下面先介紹一下計(jì)算機(jī)對顏色的處理。

計(jì)算機(jī)屏幕由像素組成,這些像素的顏色由三個(gè)顏色混合生成,這三個(gè)顏色就是三基色:紅色(R),綠色(G)和藍(lán)色(B)。每個(gè)顏色的發(fā)光強(qiáng)度決定了該像素的顏色,用0到255之間的一個(gè)整數(shù)來表示發(fā)光強(qiáng)度的大小,因此,RGB三個(gè)顏色中的每個(gè)都有256種亮度等級?梢酝ㄟ^三者的乘積,獲得計(jì)算機(jī)中可以顯示的顏色總數(shù):256*256*256=16777216。

在項(xiàng)目中定義一些顏色:

  1. BLACK = (000)   # 黑色 
  2. WHITE = (255255255)   # 白色 
  3. RED = (25500)   # 紅色 
  4. GREEN = (02550)   # 綠色 
  5. BLUE = (00255)   # 藍(lán)色 

以上顏色由一個(gè)元組定義,元組中的項(xiàng)按照RGB排序,數(shù)值為顏色的亮度等級。

給屏幕填充顏色,并使最近繪制的屏幕可見:

  1. screen.fill(WHITE) 
  2. pygame.display.flip() 

(3)事件部分

此時(shí)嘗試運(yùn)行程序,則會(huì)發(fā)現(xiàn)程序存在問題——無法關(guān)閉窗口,單擊窗口右上角的“關(guān)閉”按鈕無效。這是因?yàn)?ldquo;單擊窗口右上角的‘關(guān)閉’按鈕”其實(shí)是一個(gè)事件,需要監(jiān)聽該事件并做出相應(yīng)處理——退出游戲。

事件可以隨時(shí)發(fā)生。如果游戲在循環(huán)的更新或渲染過程中單擊其他按鈕怎么辦?Pygame要做的是保存自上一幀以來發(fā)生的所有事件。這樣,如果游戲快速將許多按鈕混在一起,那么可以使所有按鈕都有效。監(jiān)聽的事件是一個(gè)列表,可以使用一個(gè)for循環(huán)來查看它們:

  1. for event in pygame.event.get(): 
  2.     # 檢查窗口是否關(guān)閉 
  3.     if event.type == pygame.QUIT: 
  4.         running = False 

Pygame中有很多可以監(jiān)聽的事件,pygame.QUIT是單擊窗口右上角的“關(guān)閉”時(shí)觸發(fā)的事件,此時(shí)將running設(shè)置為False,游戲循環(huán)將終止。

(4)控制FPS

使用FPS來控制游戲的運(yùn)行速度:

  1. while running: 
  2.     clock.tick(FPS) 

tick()方法用于告訴Pygame循環(huán)所花的時(shí)間。變量FPS已經(jīng)賦值為30,這意味著游戲循環(huán)每秒應(yīng)該發(fā)生30次,即每幀持續(xù)1⁄30秒。

(5)組裝代碼

將上述代碼組裝起來,并在末尾添加pygame.quit()用于終止游戲:

  1. import pygame 
  2.  
  3. WIDTH = 300 
  4. HEIGHT = 420 
  5. FPS = 30 
  6.  
  7. # 定義顏色 
  8. WHITE = (255255255
  9. BLACK = (000
  10. RED = (25500
  11. GREEN = (02550
  12. BLUE = (00255
  13.  
  14. # 初始化pygame并創(chuàng)建游戲窗口 
  15. pygame.init() 
  16. pygame.mixer.init() 
  17. screen = pygame.display.set_mode((WIDTH, HEIGHT)) 
  18. pygame.display.set_caption('Demo Game'
  19. clock = pygame.time.Clock() 
  20.  
  21. # 游戲循環(huán) 
  22. running = True 
  23. while running: 
  24.     clock.tick(FPS) 
  25.     for event in pygame.event.get(): 
  26.         if event.type == pygame.QUIT: 
  27.             running = False 
  28.  
  29.     screen.fill(WHITE) 
  30.     pygame.display.flip() 
  31.  
  32. pygame.quit() 

將上述代碼進(jìn)行保存,文件名為template.py,本書后文將使用該P(yáng)ygame模板作為項(xiàng)目的起點(diǎn)。

運(yùn)行template.py,運(yùn)行結(jié)果如圖1所示。

圖1 Pygame模板運(yùn)行結(jié)果

文章“【Python基礎(chǔ)知識】Pygame的基本使用——游戲循環(huán)和模板”已幫助

更多內(nèi)容

>>本文地址:http://liujunjsxg.cn/zhuanye/2021/70178.html

THE END  

聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

1 您的年齡

2 您的學(xué)歷

3 您更想做哪個(gè)方向的工作?

獲取測試結(jié)果
  • 大前端大前端
  • 大數(shù)據(jù)大數(shù)據(jù)
  • 互聯(lián)網(wǎng)營銷互聯(lián)網(wǎng)營銷
  • JavaJava
  • Linux云計(jì)算Linux
  • Python+人工智能Python
  • 嵌入式物聯(lián)網(wǎng)嵌入式
  • 全域電商運(yùn)營全域電商運(yùn)營
  • 軟件測試軟件測試
  • 室內(nèi)設(shè)計(jì)室內(nèi)設(shè)計(jì)
  • 平面設(shè)計(jì)平面設(shè)計(jì)
  • 電商設(shè)計(jì)電商設(shè)計(jì)
  • 網(wǎng)頁設(shè)計(jì)網(wǎng)頁設(shè)計(jì)
  • 全鏈路UI/UE設(shè)計(jì)UI設(shè)計(jì)
  • VR/AR游戲開發(fā)VR/AR
  • 網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全
  • 新媒體與短視頻運(yùn)營新媒體
  • 直播帶貨直播帶貨
  • 智能機(jī)器人軟件開發(fā)智能機(jī)器人
 

快速通道fast track

近期開班時(shí)間TIME