<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本案例需求的類圖如下所示:三個屬性,兩個方法
本文所要開發的遊戲精靈,是繼承自pygame的精靈子類
GameSprite | ||
---|---|---|
image | rect | speed |
init(self, image_name, speed = 1): | update(self): |
想實現遊戲精靈這個子類程式碼。首先,讓遊戲精靈繼承自pygame
的精靈類,在初始化方法中,我們先呼叫了一下父類別的初始化方法。然後,按照需求,依次定義了三個屬性,分別是影象(image),位置(rect),以及速度(speed)。並且,重寫了一下父類別的update方法,在update方法中,我們對rect的y值做了一個修改,讓y值加上速度speed,這樣,我們就可以讓遊戲精靈按照垂直方向進行移動了。
注意:在我們開發子類的時候,如果子類的父類別不是object這個基礎類別,我們在初始化方法中,需要主動呼叫一下父類別的初始化方法。因為,不主動呼叫父類別的初始化方法,我們就沒辦法享受到父類別中已經封裝好的初始化方法。
按照需求所完成的具體程式碼演示如下所示:
GameSprite
,在括號中指定一下游戲精靈的父類別pygame.sprite.Sprite。import pygame class GameSprite(pygame.sprite.Sprite): """飛機大戰遊戲精靈""" def __init__(self, image_name, speed=1): # 呼叫父類別的初始化方法 super().__init__() # 定義物件的屬性 self.image = pygame.image.load(image_name) self.rect = self.image.get_rect() self.speed = speed pass def update(self): # 在螢幕的垂直方向上移動 self.rect.y += self.speed
首先回顧一下,我們的專案實戰內容:
本專案主要想使用pygame模組開發一款飛機大戰遊戲,從而強化物件導向程式設計,遊戲能夠使玩家控制英雄飛機,消滅敵機,根據使用者的互動或其他情況,移動這些影象,產生動畫效果。
然後根據影象之間是否發生重疊,判斷敵機是否被摧毀等其他情況。
使用上一小節中剛剛派生的遊戲精靈和精靈組建立敵機並且實現敵機動畫。
from
匯入的模組可以直接使用import
匯入的模組需要通過模組名.
來使用update()
(更新組中所有精靈的位置)和draw(screen)
(把組中所有的精靈全部繪製在螢幕上)方法精靈物件職責:
精靈組物件職責:
update
方法,讓精靈組中的所有精靈呼叫update方法更新位置draw(screen)
方法,在screen上繪製精靈組中所有精靈案例中對應的具體程式碼演示如下所示:
import pygame from plane_sprites import * pygame.init() # 建立遊戲的視窗 640*642 screen = pygame.display.set_mode((640, 642)) # 繪製背景影象 bg = pygame.image.load("./飛機大戰資料包/images/background1.jpg") screen.blit(bg, (0, 0)) # 繪製英雄的飛機 hero = pygame.image.load("./飛機大戰資料包/images/me1.png") screen.blit(hero, (280, 500)) # 可以在所有繪製工作完成之後,統一呼叫update方法 pygame.display.update() # 建立時鐘物件 clock = pygame.time.Clock() # 遊戲迴圈->意味著遊戲的正式開始 # 1. 定義rect記錄飛機的初始位置 hero_rect = pygame.Rect(280, 500, 102, 126) # 建立敵機的精靈,使用類建立物件 enemy = GameSprite("./飛機大戰資料包/images/enemy1.png") enemy1 = GameSprite("./飛機大戰資料包/images/enemy1.png", 2) # 建立敵機的精靈組 enemy_group = pygame.sprite.Group(enemy, enemy1) # 遊戲迴圈->意味著遊戲的正式開始 while True: # 希望無限迴圈內部的程式碼每秒鐘重複迴圈60次 # 可以指定迴圈體內部的程式碼執行的頻率 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 <= -126: hero_rect.y = 642 # 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()
程式碼執行結果如下圖所示:可以看出有兩j架敵機向下飛行,實際結果為動畫效果。
以上就是Python pygame派生精靈和精靈組建立敵機的詳細內容,更多關於Python pygame精靈精靈組的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45