Pygame游戲開發(fā)之太空射擊實(shí)戰(zhàn)圖像精靈下篇
視頻
圖像精靈
這是我們教程系列“使用 Pygame 進(jìn)行游戲開發(fā)”的第 3 部分。它適用于對游戲開發(fā)和提高Python編碼技能感興趣的初學(xué)者/中級程序員。您應(yīng)該從第 1 部分開始:入門
變?yōu)閳D形精靈
彩色矩形很好 - 它們是開始并確保游戲正常工作的好方法,但遲早你會(huì)想要為你的精靈使用很酷的宇宙飛船圖像或角色。這就引出了第一個(gè)問題:您從哪里獲得游戲圖形。
在哪里可以找到藝術(shù)品
當(dāng)您的游戲需要美術(shù)時(shí),您有 3 種選擇:
- 自己畫
- 找一個(gè)藝術(shù)家為你畫畫
- 使用來自互聯(lián)網(wǎng)的預(yù)先存在的藝術(shù)品
如果您或您的朋友有藝術(shù)傾向,1和2是可以的,但是對于大多數(shù)程序員來說,創(chuàng)建漂亮的藝術(shù)并不在我們的技能范圍內(nèi)。記住你不應(yīng)該使用你沒有權(quán)利使用的藝術(shù)是非常重要的,特別是如果您打算將其放到網(wǎng)上并讓其他人看到它。
幸運(yùn)的是,有一個(gè)很好的解決方案:OpenGameArt.org。這個(gè)網(wǎng)站加載了大量的藝術(shù),聲音,音樂等等 - 這一切都是由藝術(shù)家慷慨授權(quán)的,供您在游戲中使用。你可以在那里找到最好的藝術(shù)家之一Kenney(只要把他的名字放在搜索框中)。
您也可以訪問Kenney的網(wǎng)站。
我喜歡使用肯尼的藝術(shù)的原因是他喜歡成包發(fā)布它。這意味著您可以獲得風(fēng)格完全匹配的藝術(shù)品集,而不是嘗試混合和匹配來自多個(gè)藝術(shù)家的圖像。
在本課中,我們將使用 Kenney 的 Platformer Art Complete Pack,它有很多用于制作平臺游戲風(fēng)格的游戲的圖形。繼續(xù)下載并解壓縮。我們將使用圖像“p1_jump.png”:
您也可以只需單擊上面的圖像即可下載播放器圖像。
組織游戲組件
首先,我們需要一個(gè)文件夾來保存我們的組件,這是游戲開發(fā)人員用來指代藝術(shù)和聲音等事物的術(shù)語。我簡稱該文件夾為“img”,并將玩家圖像放入其中。
要在游戲中使用此圖像,我們需要告訴 Pygame 加載圖片文件,這意味著我們需要程序知道文件的位置。根據(jù)您使用的計(jì)算機(jī)類型,這可能會(huì)有所不同,并且我們希望能夠在任何計(jì)算機(jī)上運(yùn)行我們的程序,因此我們需要加載一個(gè)名為os
的Python庫,然后指定我們的游戲所在的位置:
import pygame import random import os # set up asset folders game_folder = os.path.dirname(__file__)
特殊的 Python 變量__file__
是指保存游戲代碼的文件夾,該命令os.path.dirname
會(huì)找出該文件夾的路徑。如果您使用的是 Windows,則路徑可能如下所示:
C:\Users\chris\Documents\python\game.py
不同的操作系統(tǒng)使用不同的方法來描述事物在計(jì)算機(jī)上的位置。通過使用os.path
命令,我們可以讓計(jì)算機(jī)找出正確的路徑是什么(例如,是使用“/”還是“\”)。
現(xiàn)在,我們可以指定我們的“img”文件夾:
import pygame import random import os # set up asset folders game_folder = os.path.dirname(__file__) img_folder = os.path.join(game_folder, 'img') player_img = pygame.image.load(os.path.join(img_folder, 'p1_jump.png')).convert()
現(xiàn)在,我們已經(jīng)通過使用pygame.image.load()
加載了我們的圖像,并且確保使用convert()
,這將通過將圖像轉(zhuǎn)換為在屏幕上繪制速度更快的格式來加快Pygame的繪制速度?,F(xiàn)在,我們準(zhǔn)備將 sprite 中的普通綠色方塊替換為花哨的玩家圖像:
class Player(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = player_img self.rect = self.image.get_rect() self.rect.center = (WIDTH / 2, HEIGHT / 2)
請注意,我們已經(jīng)刪除了self.image.fill(GREEN)
命令- 我們不再需要用純色填充它。 get_rect()
仍然可以正常工作,因?yàn)樗鼤?huì)找出self.image
邊界矩形。
現(xiàn)在,如果您運(yùn)行該程序,您應(yīng)該看到一個(gè)漂亮的小卡通外星人在屏幕上奔跑。但是我們有一個(gè)問題 - 一個(gè)我們看不到的問題,因?yàn)楸尘澳壳笆呛谏?。將底部的命?code>screen.fill()更改為其他命令 - 我決定使用BLUE
.現(xiàn)在您可以看到問題:
當(dāng)計(jì)算機(jī)上有圖像文件時(shí),該文件始終是像素的矩形網(wǎng)格。無論您繪制了什么形狀,圖像仍然有一個(gè)填充“背景”的邊框。我們需要做的是告訴Pygame忽略圖像中我們不關(guān)心的像素。在此圖像中,這些像素恰好是黑色的,因此我們可以添加以下內(nèi)容:
class Player(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = player_img self.image.set_colorkey(BLACK) self.rect = self.image.get_rect() self.rect.center = (WIDTH / 2, HEIGHT / 2)
set_colorkey()
只是告訴Pygame,當(dāng)我們繪制圖像時(shí),我們要忽略指定顏色的任何像素。現(xiàn)在我們的圖像看起來好多了:
恭喜你,你現(xiàn)在已經(jīng)學(xué)習(xí)了使用Pygame的基礎(chǔ)知識!現(xiàn)在是時(shí)候開始制作一款真正的游戲了。我們創(chuàng)建了一些教程,展示了從頭到尾創(chuàng)建完整游戲的過程。隨著我們的發(fā)展,它們變得越來越復(fù)雜,因此建議您按順序?qū)W習(xí)它們。
到此這篇關(guān)于Pygame游戲開發(fā)之太空射擊實(shí)戰(zhàn)圖像精靈下篇的文章就介紹到這了,更多相關(guān)Pygame圖像精靈內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pyqt5實(shí)現(xiàn)英文學(xué)習(xí)詞典
這篇文章主要為大家詳細(xì)介紹了Pyqt5實(shí)現(xiàn)英文學(xué)習(xí)詞典的相關(guān)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06Python編程判斷一個(gè)正整數(shù)是否為素?cái)?shù)的方法
這篇文章主要介紹了Python編程判斷一個(gè)正整數(shù)是否為素?cái)?shù)的方法,涉及Python數(shù)學(xué)運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-04-04Python實(shí)現(xiàn)多子圖繪制系統(tǒng)的示例詳解
這篇文章主要介紹了如何利用python實(shí)現(xiàn)多子圖繪制系統(tǒng),文中的示例代碼講解詳細(xì),具有一定的的參考價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-09-09Python的ORM框架SQLObject入門實(shí)例
這篇文章主要介紹了Python的ORM框架SQLObject簡單使用實(shí)例,使用Linux Mint 15、Python 2.7,需要的朋友可以參考下2014-04-04解決django xadmin主題不顯示和只顯示bootstrap2的問題
這篇文章主要介紹了解決django xadmin主題不顯示和只顯示bootstrap2的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03