pygame游戲圖像繪制及精靈用法


1精靈文件 plane_sprites.py

 1 import pygame
 2 
 3 class GameSprite(pygame.sprite.Sprite):
 4     """飛機大戰游戲精靈"""
 5     def __init__(self,plane_name,speed=1):
 6 
 7         # 調用父類方法 只要繼承的不是object類 初始化的第一步都要調用父類方法
 8         super().__init__()
 9 
10         # 定義對象的屬性
11         # 加載精靈圖像
12         self.image = pygame.image.load(plane_name)
13         # 精靈大小
14         # image的get_rect()方法,可以返回pygame.Rect(0,0,圖像寬,圖像高)的對象
15         self.rect = self.image.get_rect()
16         # 設置精靈移動速度
17         self.speed = speed
18 
19     def update(self):
20         """更新精靈位置"""
21         # 在屏幕的垂直方向移動
22         self.rect.y += self.speed

2.繪制圖像主頁面

 1 import pygame
 2 from plane_sprites import *
 3 
 4 # 游戲初始化
 5 pygame.init()
 6 
 7 # 創建游戲窗口 480*700
 8 # 使用display.set_mode()創建的screen對象是一個內存中的屏幕數據對象,可以理解成是油畫的畫布
 9 screen = pygame.display.set_mode((480,700))
10 
11 # 繪制背景圖像
12 bg = pygame.image.load("./images/background.png")
13 # 繪制背景圖像在屏幕
14 #screen.blit方法是在畫布上繪制很多圖像
15 # blit方法接收兩個參數,第一個參數是圖像數據,第二個參數是圖像的坐標
16 screen.blit(bg,(0,0))
17 
18 # display.update()會將畫布的最終結果繪制在屏幕上,這樣可以提高屏幕繪制效率,增加游戲的流暢度
19 # pygame.display.update()
20 
21 #hero1. 繪制英雄飛機
22 hero = pygame.image.load("./images/me1.png")
23 
24 #hero2. 繪制圖像在屏幕
25 screen.blit(hero,(150,300))
26 
27 # 更新顯示 只有調用update()方法 才能開到繪制在屏幕上的飛機
28 pygame.display.update( )
29 
30 #hero3. 定義rect記錄英雄飛機的初始位置
31 # Rect(x坐標,y坐標,圖片寬,圖片高)
32 hero_rect = pygame.Rect(150,300,102,126)
33 
34 
35 # pygame.time.Clock 可以非常方便的設置屏幕繪制速度----刷新頻率
36 # clock1.初始化創建一個時鍾對象
37 clock = pygame.time.Clock()
38 
39 # 創建敵機的精靈
40 enemy = GameSprite("./images/enemy1.png")
41 enemy2 = GameSprite("./images/enemy1.png",2)
42 
43 
44 # 創建敵機精靈組
45 enemy_group = pygame.sprite.Group(enemy,enemy2)
46 
47 # 游戲循環
48 while True:
49     # clock2.在游戲循環中讓時鍾對象調用tick(頻率)方法
50     # 制定循環體內部的代碼執行的頻率
51     clock.tick(60)  #每秒更新60次
52 
53     # hero4.修改英雄飛機的位置
54     hero_rect.y -= 1
55 
56     if hero_rect.y <= 0-hero_rect.height:
57         hero_rect.y = 700
58 
59     #刷新繪制背景圖片 如果沒有這一步 英雄飛機飛行時會有重影
60     screen.blit(bg,(0,0))
61     # hero5.重新繪制英雄圖像
62     screen.blit(hero,hero_rect) #blit第二個參數可以直接把Rect()放進去
63 
64     # 讓精靈組調用兩個方法才能顯示敵機
65     # 精靈組1.update
66     enemy_group.update()
67     # 精靈組2.draw(畫布)
68     enemy_group.draw(screen)
69 
70 
71     # 更新顯示
72     pygame.display.update()
73 
74     # 捕獲事件
75     # event_list = pygame.event.get()
76     # print(event_list)
77 
78 
79     # 游戲循環中監聽事件 pygame.event.get() 可以獲得用戶當前所做動作的事件列表
80     for event in pygame.event.get():
81 
82         # 事件event
83         # print(event)
84 
85         # 判斷用戶是否點擊了關閉按鈕
86         if event.type == pygame.QUIT:
87             print("游戲腿粗")
88 
89             # 退出游戲循環 卸載所有模塊
90             pygame.quit()
91 
92             # 直接退出系統
93             exit()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM