<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
這是我們“使用 Pygame 進行遊戲開發”教學系列的第 2 部分。您應該從第 1 部分開始:入門
sprite 是一個計算機圖形術語,指螢幕上可以移動的任何物件。當您玩任何2D遊戲時,您在螢幕上看到的所有物件都是精靈。精靈可以是動畫的,它們可以由玩家控制,甚至可以相互互動。
我們將在遊戲迴圈的更新和繪製部分中負責更新和繪製精靈。但您可能可以想象,如果您的遊戲具有大量精靈,那麼遊戲迴圈的這些部分可能會變得非常長且複雜。幸運的是,Pygame對此有一個很好的解決方案:精靈組。
精靈組只是一個精靈的集合,您可以同時對它們執行所有操作。讓我們建立一個精靈組來儲存遊戲中的所有精靈:
clock = pygame.time.Clock() all_sprites = pygame.sprite.Group()
現在,我們可以通過在迴圈中新增以下內容來利用該組:
# Update all_sprites.update() # Draw / render screen.fill(BLACK) all_sprites.draw(screen)
現在,對於我們建立的每個精靈,我們只需確保將其新增到all_sprites
精靈組中,它就會自動繪製在螢幕上,並且每次通過迴圈進行更新。
現在我們準備製作我們的第一個精靈。在Pygame中,精靈是物件。它是將資料和程式碼分組到單個實體中的便捷方法。起初可能有點令人困惑,但幸運的是,Pygame精靈是練習物件並習慣它們工作方式的好方法。
我們首先定義我們的新精靈:
class Player(pygame.sprite.Sprite):
class
告訴Python我們正在定義一個新類,它將是玩家精靈,其型別是pygame.sprite.Sprite
,這意味著它將基於Pygame的預定義Sprite
類
我們在class
定義中第一位程式碼是__init__()
特殊函數,它定義了每當建立此型別的新物件時將執行哪些程式碼。每個 Pygame Sprite
必須具有兩個屬性:一個image
和一個rect
:
關於Surface物件的介紹可以參考這裡的介紹:網址
class Player(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface((50, 50)) self.image.fill(GREEN) self.rect = self.image.get_rect()
第一行pygame.sprite.Sprite.__init__(self)
是 Pygame 所必需的 ,它執行內建的Sprint
類初始值設定項。接下來,我們定義 image
屬性,在這裡,我們只是建立一個Surface,它是50 x 50
正方形並用GREEN顏色填充它。稍後,我們將學習如何用 image
建立精靈,例如角色或宇宙飛船,但現在一個固定大小的正方形已經足夠了。
接下來,我們必須定義精靈的rect
,它是“矩形”的縮寫。在 Pygame 中,矩形無處不在,以跟蹤物件的座標。get_rect()
命令計算image
的矩形。
我們可以使用rect
將精靈放在螢幕上的任何位置。讓精靈開始就出現在螢幕中間:
class Player(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface((50, 50)) self.image.fill(GREEN) self.rect = self.image.get_rect() self.rect.center = (WIDTH / 2, HEIGHT / 2)
現在我們已經定義了 Player 精靈,我們需要通過建立 Player
類的範例來“生成”它。我們還需要確保將 sprite
新增到all_sprites
組中:
all_sprites = pygame.sprite.Group() player = Player() all_sprites.add(player)
現在,如果您執行程式,您將在螢幕中心看到綠色方塊。繼續並增加WIDTH
和HEIGHT
的設定,以便您將有足夠的空間讓精靈在下一步中移動。
請記住,在遊戲迴圈中,我們有all_sprites.update()
.這意味著對於組中的每個精靈,Pygame將查詢一個update()
函數並執行它。因此,要讓我們的精靈移動,我們只需要定義它的更新規則:
class Player(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface((50, 50)) self.image.fill(GREEN) self.rect = self.image.get_rect() self.rect.center = (WIDTH / 2, HEIGHT / 2) def update(self): self.rect.x += 5
這意味著每次通過遊戲迴圈時,我們都會將精靈的 x 座標增加 5 個畫素。繼續執行它,你會看到精靈消失在螢幕右側:
讓我們通過使精靈環繞運動來解決這個問題 - 每當它到達螢幕的右側時,我們都會將其移動到左側。我們可以通過在精靈的rect
上使用一個方便的“控制程式碼”來輕鬆完成此操作:
因此,如果rect
的左邊緣離開螢幕,我們將右邊緣設定為 0:
class Player(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface((50, 50)) self.image.fill(GREEN) self.rect = self.image.get_rect() self.rect.center = (WIDTH / 2, HEIGHT / 2) def update(self): self.rect.x += 5 if self.rect.left > WIDTH: self.rect.right = 0
現在我們可以看到精靈將出現在螢幕周圍:
這將在本課中完成。繼續嘗試 - 請注意,您在精靈update()
方法中放入的任何內容都會在每一幀發生。嘗試讓精靈上下移動(更改y座標)或讓它從牆上反彈(當矩形到達邊緣時反轉方向)。
在下一教學中,我們將向您展示如何為精靈使用藝術 - 將其從普通正方形更改為動畫角色。
到此這篇關於Pygame遊戲開發之太空射擊實戰精靈的使用篇的文章就介紹到這了,更多相關Pygame太空射擊內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援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