等等,我們好像只是繪製了一動的張圖
專案原始碼
不知道你有沒有發現,我們現在好像只是繪製了一張動的圖,只是一張!!!就這麼多**了,如果有100張 10000+張?那我們這麼高?
別擔心,pygame給我們提供了解決方案------精靈還有精靈組
在遊戲開發中 顯示影象的物件 就是精靈別著急我們先來看一下,它確實是乙個類,這裡是它的類圖
作用:分析一下這個類的構成
小心有坑!
乙個精靈組可以包含多個精靈物件
呼叫精靈組物件的update()
方法
呼叫精靈組物件的draw(螢幕物件)
方法
總的來說就是統一指揮 統一行動,但是每乙個項又有自己的獨立的運動方法和屬性
group(*sprites) -> group
例項**:
# 1. 新建 `plane_sprites.py` 檔案
# 2. 定義 `gamesprite` 繼承自 `pygame.sprite.sprite`
import pygame
# 3.寫在括號裡的意思是繼承父類
class gamesprite(pygame.sprite.sprite):
"""飛機大戰中的遊戲精靈,根據設計的uml編寫**"""
#注意這裡要重寫init方法,我們在init初始化方法(行函式)傳參
def __init__(self, image_name, speed=1):
# 呼叫父類的初始化方法,當我們的父類不是object基類的時候一定要呼叫super()物件來呼叫父類的初始化inint方法
super().__init__()
# 定義物件的屬性,它們分別記錄著精靈的位置速度還有運動方式
# 載入影象
self.image = pygame.image.load(image_name)
# 設定尺寸
self.rect = self.image.get_rect()
# 記錄速度
self.speed = speed
def update(self):
# 在螢幕的垂直方向上移動
self.rect.y += self.speed
什麼?你不知道我們的主程式是什麼?好吧,是我忘記告訴你了,我們的主程式就是我們之前寫的 繪製視窗的那個程式,其實這也非常的簡單 ,你只需要在遊戲主程式中匯入包
如何完成新增「敵機」精靈,並且讓它動起來,再把它們放到遊戲迴圈裡面就行了
注意:
我們先來明確一下精靈還有精靈組的分工
1. 精靈
* 封裝 **影象 image**、**位置 rect** 和 **速度 speed**
* 提供 `update()` 方法,根據遊戲需求,**更新位置 rect**
2. 精靈組
* 包含 **多個** **精靈物件**
* `update` 方法,讓精靈組中的所有精靈呼叫 `update` 方法更新位置
* `draw(screen)` 方法,在 `screen` 上繪製精靈組中的所有精靈
完整的**例項
import pygame
# 你需要匯入 form和import 使用inprom匯入的時候需要.來使用 使用form的時候 直接使用模組提供的工具就行了。
# 它們都是實現了匯入模組的功能
from plane_sprites import *
# 遊戲的初始化
pygame.init()
# 建立遊戲的視窗 480 * 700
screen = pygame.display.set_mode((480, 700))
# 繪製背景影象
bg = pygame.image.load("./images/background.png")
screen.blit(bg, (0, 0))
# pygame.display.update()
# 繪製英雄的飛機
hero = pygame.image.load("./images/me1.png")
screen.blit(hero, (150, 300))
# 可以在所有繪製工作完成之後,統一呼叫update方法
pygame.display.update()
# 建立時鐘物件
clock = pygame.time.clock()
# 1. 定義rect記錄飛機的初始位置
hero_rect = pygame.rect(150, 300, 102, 126)
# 開始我們的業務邏輯
# 建立敵機的精靈
# 敵人的戰鬥機物件
enemy = gamesprite("./images/enemy1.png")
enemy1 = gamesprite("./images/enemy1.png", 2)
# 建立敵機的精靈組,我們可以使用多值的方式傳遞精靈組合,有了這個精靈組,我們就可以直接使用精靈的方法了,一次性的繪製所有的影象
enemy_group = pygame.sprite.group(enemy, enemy1)
# # 讓精靈組呼叫兩個方法
# # update - 讓組中的所有精靈更新位置,這個是更新位置
# enemy_group.update()
# # draw - 在screen上繪製所有的精靈,這個是繪製
# enemy_group.draw(screen)
# 我們只是呼叫一次,現在我們把它丟到我們的遊戲迴圈裡面去
# 遊戲迴圈 -> 意味著遊戲的正式開始!
while true:
# 可以指定迴圈體內部的**執行的頻率
clock.tick(60)
# 監聽事件
for event in pygame.event.get():
# 判斷事件型別是否是退出事件
if event.type == pygame.quit:
print("遊戲退出...")
# quit 解除安裝所有的模組
pygame.quit()
# exit() 直接終止當前正在執行的程式
exit()
# 2. 修改飛機的位置
hero_rect.y -= 1
# 判斷飛機的位置
if hero_rect.y <= 0:
hero_rect.y = 700
# 3. 呼叫blit方法繪製影象
screen.blit(bg, (0, 0))
screen.blit(hero, hero_rect)
# 讓精靈組呼叫兩個方法
# update - 讓組中的所有精靈更新位置,這個是更新位置
enemy_group.update()
# draw - 在screen上繪製所有的精靈,這個是繪製
enemy_group.draw(screen)
# 4. 呼叫update方法更新顯示
pygame.display.update()
pygame.quit()
Python 專案 小遊戲
專案原始碼 遊戲初體驗畫面 略,請去參考部落格 驗證一下本地第三方包有沒有匯入 python3 m pygame.examples.aliens 如果沒有出現遊戲畫面請先安裝這個包 sudo pip3 install pygame 開始搭建目錄結構 建立主程式設計師 ganme main.py 把素...
python小遊戲 飛機大戰(3)
二 新增 動畫 3 執行展示 三 遊戲結束介面 四 計分 五 提公升遊戲難度 六 總結 前兩節已經實現遊戲基本功能,接下來是對遊戲的完善,包括 動畫 計分 結束畫面等。這個其實是在剛開始開發就需要做的,這裡是為了方便讀者理解,將其挪到遊戲基本功能完成後再進行調整。基本思路其實很簡單,就是建立時鐘物件...
猜拳小遊戲(python)
import random 載入模組random 隨機數 win 0 定義勝場 lose 0 定義敗場 dogfall 0 定義平局 while true while 迴圈 print 10 猜拳遊戲 10 遊戲開頭輸出 遊戲名 print 勝 s,敗 s,平 s win,lose,dogfall ...