python中的pygame模块使用方法_Pygame的基本使用
Pygame有很多模塊,每個模塊又有很多方法,在此不能夠逐一講解,所以,我們通過一個實例來學(xué)習(xí)Pygame,然后再分解代碼,講解代碼中的模塊。
例:制作一個跳躍的小球游戲。
創(chuàng)建一個游戲窗口,然后在窗口內(nèi)創(chuàng)建一個小球。以一定的速度移動小球,當(dāng)小球wordpress碰到游戲窗口的邊緣時,小球彈回,繼續(xù)移動。可以按照如下步驟實現(xiàn)該功能。
(1)創(chuàng)建一個游戲窗口,寬和高設(shè)置為640*480。代碼如下:
import sys #導(dǎo)入sys模塊
import pygame #導(dǎo)入pygame模塊
pygame.init() #初始化pygame
size = width,height = 640,480 #設(shè)置窗口
screen = pygame.display.set_mode(size) #顯示窗口
上述代碼中,首先導(dǎo)入pygame模塊,然后調(diào)用init()方法初始化pygame模塊。接下來,設(shè)置h3cne窗口的寬和高,最后使用display模塊顯示窗體。display模塊的常用方法如下表selenium所示。
方法名
功能
pygame.dispaly.init
初始化display模塊
pygame.dispaly.quit
結(jié)束display模塊
pygame.dispaly.get_init
如果display模塊已經(jīng)被初始化,則返回True
pygame.dispaly.set_mode
初始化一個準(zhǔn)備顯示的界面
pygame.dispaly.get_surface
獲取當(dāng)前的Surface對象
pygame.dispaly.flip
更新整的待顯示的Surface對象到屏幕上
pygame.dispaly.update
更新部分內(nèi)容顯示到屏幕上,如果沒有參數(shù)則與flip功能相同
(2)運行上述代碼,會出現(xiàn)一個一閃而過的黑色窗口,這是因為程序執(zhí)行完成后會自動關(guān)閉。如果讓窗口一直顯示,需要使用while True讓程序一直執(zhí)行,此外,還需要設(shè)置webdriver關(guān)閉按鈕。具體代碼如下:
#-*-coding:utf-8-*-
import sys #導(dǎo)入sys模塊
import pygame #導(dǎo)入pygame模塊
pygame.init() #初始化pygame
size = width,height = 640,480 #設(shè)置窗口
screen = pygame.display.set_mode(size) #顯示窗口
#執(zhí)行死循環(huán),確保窗口一直顯示
while True:
#檢查事件
for event in pygame.event.get():
if event.type == pygame.QUIT: #如果單擊關(guān)閉窗口,則退出
sys.exit()
pygame.quit() #退出pygame
上述代碼中,添加了輪詢事件檢測。pygame.event.get()能夠獲取事件隊列,使用for...in遍歷事件,然后根據(jù)type屬性判斷事件類型。這里的事件處理方式與GUI類似,如event.tpye等于pygame.QUIT表示檢測到關(guān)閉pygame窗口事件,pygame.KEYDOWN表示鍵盤按下事件,pygame.MOUSEBUTTONDOWN表示鼠標(biāo)按下事件等。
(3)在窗口中添加小球。我們準(zhǔn)備好一張ball.png圖片,然后加載該圖片。最后將圖片顯示DedeCMS在窗口中,具體代碼如下:
#-*-coding:utf-8-*-
import sys #導(dǎo)入sys模塊
import pygame #導(dǎo)入pygame模塊
pygame.init() #初始化pygame
size = width,height = 640,480 #設(shè)置窗口
screen = pygame.display.set_mode(size) #顯示窗口
color = (0,0,0) #設(shè)置顏色
ball = pygame.image.load("ball.png") #加載圖片
ballrect = ball.get_rect() #獲取矩形區(qū)域
#執(zhí)行死循環(huán),確保窗口一直顯示
while True:
#檢查事件
for event in pygame.event.get():
if event.type == pygame.QUIT: #如果單擊關(guān)閉窗口,則退出
sys.exit()
screen.fill(color) #填充顏色
screen.blit(ball,ballrect) #將圖片畫到窗口上
pygame.display.flip() #更新全部顯示
pygame.quit() #退出pygame
上述代碼中,使用image模塊的loda()方法加載圖片,返回值ball是一個Surface對象。Surface是用來代表圖片的Pygame對象,可以對一個Surface對象進(jìn)行涂畫、變形、復(fù)制等各種操作,事實上,屏幕也只是一個Surface,pygame,display.set_mode就返回了一個屏幕Surface對象。如果將ball這個Surface對象畫到screenSurface對象,需要使用bilt()方法,最后使用display模塊的filp方法更新整個待顯示的Surface對象到屏幕上。Surface對象的常用方法如下表所示。
方法名
功能
pygame.Surface.blit
將一個圖像畫到另一個圖像上
pygame.Surface.convert
轉(zhuǎn)換圖像的像素格式
pygame.Surface.convert_Alpha
轉(zhuǎn)換圖像的像素格式,包含Alpha通道的轉(zhuǎn)換
pygame.Surface.fill
使用顏色填充Surface
pygame.Surface.get_rect
獲取Surface的矩形區(qū)域
運行上述代碼,結(jié)果如下圖。
(4)下面該讓小球動起來了。ball.get_rect()方法返回值ballrect是一個Rect對象,該ECShop對象有一個move()方法可以用于移動矩形。move(x,y)函數(shù)有兩個參數(shù),第一個參數(shù)是X軸移動的距離,第二個參數(shù)是Y軸移動的距離。窗體左上角坐標(biāo)為(0,0),例如move(100,50),如下圖示。
為實現(xiàn)小球不停地移動,將move()函數(shù)添加到whlie循環(huán)內(nèi),具體h3c代碼如下:
#-*-coding:utf-8-*-
import sys #導(dǎo)入sys模塊
import pygame #導(dǎo)入pygame模塊
pygame.init() #初始化pygame
size = width,height = 640,480 #設(shè)置窗口
screen = pygame.display.set_mode(size) #顯示窗口
color = (0,0,0) #設(shè)置顏色
ball = pygame.image.load("ball.png") #加載圖片
ballrect = ball.get_rect() #獲取矩形區(qū)域
speed = [5,5] #設(shè)置移動的X軸、Y軸距離
#執(zhí)行死循環(huán),確保窗口一直顯示
while True:
#檢查事件
for event in pygame.event.get():
if event.type == pygame.QUIT: #如果單擊關(guān)閉窗口,則退出
sys.exit()
ballrect = ballrect.move(speed) #移動小球
screen.fill(color) #填充顏色
screen.blit(ball,ballrect) #將圖片畫到窗口上
pygame.display.flip() #更新全部顯示
pygame.quit() #退出pygame
(5)運行上述代碼,發(fā)現(xiàn)小球在屏幕中一閃而過,此時,linux小球并沒有真正消失,而是移動到窗體之外,此時需要添加碰撞檢測的功能。當(dāng)小球與窗體任一邊緣發(fā)生碰撞,則更改小球的移動方向。具體代碼如下:
#-*-coding:utf-8-*-
import sys #導(dǎo)入sys模塊
import pygame #導(dǎo)入pygame模塊
pygame.init() #初始化pygame
size = width,height = 640,480 #設(shè)置窗口
screen = pygame.display.set_mode(size) #顯示窗口
color = (0,0,0) #設(shè)置顏色
ball = pygame.image.load("ball.png") #加載圖片
ballrect = ball.get_rect() #獲取矩形區(qū)域
speed = [5,5] #設(shè)置移動的X軸、Y軸距離
#執(zhí)行死循環(huán),確保窗口一直顯示
while True:
#檢查事件
for event in pygame.event.get():
if event.type == pygame.QUIT: #如果單擊關(guān)閉窗口,則退出
sys.exit()
ballrect = ballrect.move(speed) #移動小球
#碰到左右邊緣
if ballrect.left < 0 or ballrect.right > width:
speed[0] = -speed[0]
#碰到上下邊緣
if ballrect.top < 0 or ballrect.right > height:
speed[1] = -speed[1]
screen.fill(color) #填充顏色
screen.blit(ball,ballrect) #將圖片畫到窗口上
pygame.display.flip() #更新全部顯示
pygame.quit() #退出pygame
上述代碼中,添加了碰撞檢測功能。如果碰到左右邊緣,則更改X軸數(shù)據(jù)為負(fù)數(shù):如果碰到上下邊緣,則更改Y軸數(shù)據(jù)為負(fù)數(shù)。運行結(jié)果如下圖。
(6)運行上述代碼發(fā)現(xiàn)好像有多個小球在飛快移動,這是因為自動化測試運行上述代碼的時間非常短,導(dǎo)致肉眼觀察出錯覺,因此需要添加一個“時鐘”來控制程序運行的時間。這是就需要使用軟件測試pygame的time模塊。使用pygame時鐘之前,必須先創(chuàng)建Clock對象的一個實例,然后在while循環(huán)中設(shè)置多長時間運行一次。具體代碼如下:
#-*-coding:utf-8-*-
import sys #導(dǎo)入sys模塊
import pygame #導(dǎo)入pygame模塊
pygame.init() #初始化pygame
size = width,height = 640,480 #設(shè)置窗口
screen = pygame.display.set_mode(size) #顯示窗口
color = (0,0,0) #設(shè)置顏色
ball = pygame.image.load("ball.png") #加載圖片
ballrect = ball.get_rect() #獲取矩形區(qū)域
speed = [5,5] #設(shè)置移動的X軸、Y軸距離
clock = pygame.time.Clock() #設(shè)置時鐘
#執(zhí)行死循環(huán),確保窗口一直顯示
while True:
clock.tick(60) #每秒執(zhí)行60次
#檢查事件
for event in pygame.event.get():
if event.type == pygame.QUIT: #如果單擊關(guān)閉窗口,則退出
sys.exit()
ballrect = ballrect.move(speed) #移動小球
#碰到左右邊緣
if ballrect.left < 0 or ballrect.right > width:
speed[0] = -speed[0]
#碰到上下邊緣
if ballrect.top < 0 or ballrect.right > height:
speed[1] = -speed[1]
screen.fill(color) #填充顏色
screen.blit(ball,ballrect) #將圖片畫到窗口上
pygame.display.flip() #更新全部顯示
pygame.quit() #退出pygame
至此,就完成了測試跳躍的小球游戲。
總結(jié)
以上是生活随笔為你收集整理的python中的pygame模块使用方法_Pygame的基本使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微粒贷日利率0.045%是多少
- 下一篇: 银行大堂经理属于什么部门