Sprite表示精靈,是計算機圖形學術語,指屏幕上可以移動的任何對象。當玩任何2D游戲時,在屏幕上看到的所有對象都是精靈。精靈可以設置動畫,可以由玩家控制,甚至可以相互交互。
在游戲循環(huán)的更新和渲染部分,需要更新和渲染精靈,但是可以想象,如果游戲中包含大量精靈,那么游戲循環(huán)的這些部分可能會變得非常漫長而復雜。
Pygame為此提供了一個很好的解決方案:Sprite Group (精靈組)。
創(chuàng)建一個精靈組來容納游戲中所有的精靈:
- all_sprites = pygame.sprite.Group()
現(xiàn)在可以通過在游戲循環(huán)中添加以下內容來利用該精靈組:
- # 更新游戲
- all_sprites.update()
- # 渲染
- screen.fill(WHITE)
- all_sprites.draw(screen)
對于創(chuàng)建的每個精靈,只需確保將其添加到all_sprites精靈組中,它將自動在游戲窗口上繪制并在每次循環(huán)中進行更新。
(1)創(chuàng)建精靈
現(xiàn)在開始創(chuàng)建第一個精靈。在Pygame中,精靈是對象。首先在template.py中定義精靈類Player,類中定義__init__()方法,其中每個精靈都必須有兩個屬性,分別是image(圖像)和rect(矩形),并將其初始化:
- class Player(pygame.sprite.Sprite): # 繼承pygame中的Sprite類
- def __init__(self):
- pygame.sprite.Sprite.__init__(self)
- self.image = pygame.Surface((30, 30))
- self.image.fill(BLUE)
- self.rect = self.image.get_rect()
- self.rect.centerx = WIDTH / 2
- self.rect.centery = HEIGHT - 30
其中,定義了圖像屬性——只是創(chuàng)建了一個簡單的30*30的正方形,并用藍色填充。還定義了矩形屬性,get_rect()用于查看圖像并計算將其包圍的矩形。在Pygame中,可以使用矩形來跟蹤對象的坐標,也可以使用矩形將對象放置在游戲窗口上的任意位置。
再創(chuàng)建第二個精靈,這是一個50*50的正方形,并用紅色填充:
- class Player1(pygame.sprite.Sprite):
- def __init__(self):
- pygame.sprite.Sprite.__init__(self)
- self.image = pygame.Surface((50, 50))
- self.image.fill(RED)
- self.rect = self.image.get_rect()
- self.rect.centerx = WIDTH / 2
- self.rect.centery = HEIGHT / 2
然后分別創(chuàng)建Player類的實例player和Player1類的實例player1,還需要將player和player1添加到all_sprites精靈組中:
- all_sprites = pygame.sprite.Group()
- player = Player()
- player1 = Player1()
- all_sprites.add(player, player1)
最后進行渲染部分,在游戲循環(huán)的“screen.fill(WHITE)”代碼下面添加如下代碼:
- all_sprites.draw(screen)
運行結果如圖1所示。
圖1 創(chuàng)建精靈的運行結果
(2)移動精靈
游戲循環(huán)顯示每一幀,如果需要移動精靈,那么需要在精靈類Player中添加update()方法來更新精靈的位置:
- def update(self):
- self.rect.x += 3
上述代碼的update()方法很簡單,就是使精靈矩形的x坐標增加3個像素,即向游戲窗口右邊移動3個像素。每次游戲循環(huán),都會調用update()方法,精靈會一直右移。但是這樣有個缺點,當精靈移動到游戲窗口最右邊時,就會消失不見?梢愿膭觰pdate()方法的代碼,使得當精靈移動到最右邊時,回到最左邊繼續(xù)移動:
- def update(self):
- self.rect.x += 3
- if self.rect.left > WIDTH:
- self.rect.right = 0
同樣,在Player1類中添加update()方法,使精靈矩形向游戲窗口左邊移動2個像素,當精靈移動到最左邊時,回到最右邊繼續(xù)移動:
- def update(self):
- self.rect.x -= 2
- if self.rect.left < 0:
- self.rect.right = WIDTH
all_sprites是一個精靈組,對該組進行更新,就是對組中每一個精靈進行更新。在游戲循環(huán)中,精靈組all_sprites調用update()方法,則組中每一個精靈將自動在游戲窗口上繪制并在每次循環(huán)中進行更新:
- all_sprites.update()
運行結果如圖2所示。
圖2 移動精靈的運行結果
更多內容
>>本文地址:http://www.yiyunku.cn/zhuanye/2021/70179.html
聲明:本站稿件版權均屬中公教育優(yōu)就業(yè)所有,未經許可不得擅自轉載。
1 您的年齡
2 您的學歷
3 您更想做哪個方向的工作?