400-650-7353
您所在的位置:首頁(yè) > IT干貨資料 > python > 【Python基礎(chǔ)知識(shí)】Pygame的基本使用——使用Sprites(精靈)類(lèi)

【Python基礎(chǔ)知識(shí)】Pygame的基本使用——使用Sprites(精靈)類(lèi)

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

Sprite表示精靈,是計(jì)算機(jī)圖形學(xué)術(shù)語(yǔ),指屏幕上可以移動(dòng)的任何對(duì)象。當(dāng)玩任何2D游戲時(shí),在屏幕上看到的所有對(duì)象都是精靈。精靈可以設(shè)置動(dòng)畫(huà),可以由玩家控制,甚至可以相互交互。

在游戲循環(huán)的更新和渲染部分,需要更新和渲染精靈,但是可以想象,如果游戲中包含大量精靈,那么游戲循環(huán)的這些部分可能會(huì)變得非常漫長(zhǎng)而復(fù)雜。

Pygame為此提供了一個(gè)很好的解決方案:Sprite Group (精靈組)。

創(chuàng)建一個(gè)精靈組來(lái)容納游戲中所有的精靈:

  1. all_sprites = pygame.sprite.Group() 

現(xiàn)在可以通過(guò)在游戲循環(huán)中添加以下內(nèi)容來(lái)利用該精靈組:

  1. # 更新游戲 
  2. all_sprites.update() 
  3.  
  4. # 渲染 
  5. screen.fill(WHITE) 
  6. all_sprites.draw(screen) 

對(duì)于創(chuàng)建的每個(gè)精靈,只需確保將其添加到all_sprites精靈組中,它將自動(dòng)在游戲窗口上繪制并在每次循環(huán)中進(jìn)行更新。

(1)創(chuàng)建精靈

現(xiàn)在開(kāi)始創(chuàng)建第一個(gè)精靈。在Pygame中,精靈是對(duì)象。首先在template.py中定義精靈類(lèi)Player,類(lèi)中定義__init__()方法,其中每個(gè)精靈都必須有兩個(gè)屬性,分別是image(圖像)和rect(矩形),并將其初始化:

  1. class Player(pygame.sprite.Sprite):   # 繼承pygame中的Sprite類(lèi) 
  2.     def __init__(self): 
  3.         pygame.sprite.Sprite.__init__(self
  4.         self.image = pygame.Surface((3030)) 
  5.         self.image.fill(BLUE) 
  6.         self.rect = self.image.get_rect() 
  7.         self.rect.centerx = WIDTH / 2 
  8.         self.rect.centery = HEIGHT - 30 

其中,定義了圖像屬性——只是創(chuàng)建了一個(gè)簡(jiǎn)單的30*30的正方形,并用藍(lán)色填充。還定義了矩形屬性,get_rect()用于查看圖像并計(jì)算將其包圍的矩形。在Pygame中,可以使用矩形來(lái)跟蹤對(duì)象的坐標(biāo),也可以使用矩形將對(duì)象放置在游戲窗口上的任意位置。

再創(chuàng)建第二個(gè)精靈,這是一個(gè)50*50的正方形,并用紅色填充:

  1. class Player1(pygame.sprite.Sprite): 
  2.     def __init__(self): 
  3.         pygame.sprite.Sprite.__init__(self
  4.         self.image = pygame.Surface((5050)) 
  5.         self.image.fill(RED) 
  6.         self.rect = self.image.get_rect() 
  7.         self.rect.centerx = WIDTH / 2 
  8.         self.rect.centery = HEIGHT / 2 

然后分別創(chuàng)建Player類(lèi)的實(shí)例player和Player1類(lèi)的實(shí)例player1,還需要將player和player1添加到all_sprites精靈組中:

  1. all_sprites = pygame.sprite.Group() 
  2. player = Player() 
  3. player1 = Player1() 
  4. all_sprites.add(player, player1) 

最后進(jìn)行渲染部分,在游戲循環(huán)的“screen.fill(WHITE)”代碼下面添加如下代碼:

  1. all_sprites.draw(screen) 

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

圖1 創(chuàng)建精靈的運(yùn)行結(jié)果

(2)移動(dòng)精靈

游戲循環(huán)顯示每一幀,如果需要移動(dòng)精靈,那么需要在精靈類(lèi)Player中添加update()方法來(lái)更新精靈的位置:

  1. def update(self): 
  2.     self.rect.x += 3 

上述代碼的update()方法很簡(jiǎn)單,就是使精靈矩形的x坐標(biāo)增加3個(gè)像素,即向游戲窗口右邊移動(dòng)3個(gè)像素。每次游戲循環(huán),都會(huì)調(diào)用update()方法,精靈會(huì)一直右移。但是這樣有個(gè)缺點(diǎn),當(dāng)精靈移動(dòng)到游戲窗口最右邊時(shí),就會(huì)消失不見(jiàn)?梢愿膭(dòng)update()方法的代碼,使得當(dāng)精靈移動(dòng)到最右邊時(shí),回到最左邊繼續(xù)移動(dòng):

  1. def update(self): 
  2.     self.rect.x += 3 
  3.     if self.rect.left > WIDTH: 
  4.         self.rect.right = 0 

同樣,在Player1類(lèi)中添加update()方法,使精靈矩形向游戲窗口左邊移動(dòng)2個(gè)像素,當(dāng)精靈移動(dòng)到最左邊時(shí),回到最右邊繼續(xù)移動(dòng):

  1. def update(self): 
  2.     self.rect.x -= 2 
  3.     if self.rect.left < 0
  4.         self.rect.right = WIDTH 

all_sprites是一個(gè)精靈組,對(duì)該組進(jìn)行更新,就是對(duì)組中每一個(gè)精靈進(jìn)行更新。在游戲循環(huán)中,精靈組all_sprites調(diào)用update()方法,則組中每一個(gè)精靈將自動(dòng)在游戲窗口上繪制并在每次循環(huán)中進(jìn)行更新:

  1. all_sprites.update() 

運(yùn)行結(jié)果如圖2所示。

圖2 移動(dòng)精靈的運(yùn)行結(jié)果

文章“【Python基礎(chǔ)知識(shí)】Pygame的基本使用——使用Sprites(精靈)類(lèi)”已幫助

更多內(nèi)容

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

THE END  

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

1 您的年齡

2 您的學(xué)歷

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

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

快速通道fast track

近期開(kāi)班時(shí)間TIME