如何使用 Python 建立一名可操控的角色玩家
在 這個系列的第一篇文章 中,我解釋瞭如何使用 Python 建立一個簡單的基於文字的遊戲。在第二部分中,我向你們展示瞭如何從頭開始構建遊戲,即從 建立遊戲的環境 開始。但是每個遊戲都需要一名玩家,並且每個玩家都需要一個可操控的角色,這也就是我們接下來要在這個系列的第三部分中需要做的。
在 Pygame 中,玩家操控的圖示或者化身被稱作妖精sprite。如果你現在還沒有任何可用於玩家妖精的影像,你可以使用 Krita 或 Inkscape 來自己建立一些影像。如果你對自己的藝術細胞缺乏自信,你也可以在 OpenClipArt.org 或 OpenGameArt.org 搜尋一些現成的影像。如果你還未按照上一篇文章所說的單獨建立一個 images 資料夾,那麼你需要在你的 Python 專案目錄中建立它。將你想要在遊戲中使用的圖片都放 images 資料夾中。
為了使你的遊戲真正的刺激,你應該為你的英雄使用一張動態的妖精圖片。這意味著你需要繪製更多的素材,並且它們要大不相同。最常見的動畫就是走路迴圈,透過一系列的影像讓你的妖精看起來像是在走路。走路迴圈最快捷粗糙的版本需要四張影像。
注意:這篇文章中的程式碼示例同時相容靜止的和動態的玩家妖精。
將你的玩家妖精命名為 hero.png。如果你正在建立一個動態的妖精,則需要在名字後面加上一個數字,從 hero1.png 開始。
在 Python 中,當你在建立一個你想要顯示在螢幕上的物件時,你需要建立一個類。
在你的 Python 靠近頂端的位置,加入如下程式碼來建立一個玩家。在以下的程式碼示例中,前三行已經在你正在處理的 Python 中:
import pygame import sys import os # 以下是新程式碼 class Player(pygame.sprite.Sprite): ''' 生成一個玩家 ''' def __init__(self): pygame.sprite.Sprite.__init__(self) self.images = [] img = pygame.image.load(os.path.join('images','hero.png')).convert() self.images.append(img) self.image = self.images[0] self.rect = self.image.get_rect()
如果你的可操控角色擁有一個走路迴圈,在 images 資料夾中將對應圖片儲存為 hero1.png 到 hero4.png 的獨立檔案。
使用一個迴圈來告訴 Python 遍歷每個檔案。
''' 物件 ''' class Player(pygame.sprite.Sprite): ''' 生成一個玩家 ''' def __init__(self): pygame.sprite.Sprite.__init__(self) self.images = [] for i in range(1,5): img = pygame.image.load(os.path.join('images','hero' + str(i) + '.png')).convert() self.images.append(img) self.image = self.images[0] self.rect = self.image.get_rect()
現在已經建立好了一個 Player 類,你需要使用它在你的遊戲世界中生成一個玩家妖精。如果你不呼叫 Player 類,那它永遠不會起作用,(遊戲世界中)也就不會有玩家。你可以透過立馬執行你的遊戲來驗證一下。遊戲會像上一篇文章末尾看到的那樣執行,並得到明確的結果:一個空蕩蕩的遊戲世界。
為了將一個玩家妖精帶到你的遊戲世界,你必須透過呼叫 Player 類來生成一個妖精,並將它加入到 Pygame 的妖精組中。在如下的程式碼示例中,前三行是已經存在的程式碼,你需要在其後新增程式碼:
world = pygame.display.set_mode([worldx,worldy]) backdrop = pygame.image.load(os.path.join('images','stage.png')).convert() backdropbox = screen.get_rect() # 以下是新程式碼 player = Player() # 生成玩家 player.rect.x = 0 # 移動 x 座標 player.rect.y = 0 # 移動 y 座標 player_list = pygame.sprite.Group() player_list.add(player)
嘗試啟動你的遊戲來看看發生了什麼。高能預警:它不會像你預期的那樣工作,當你啟動你的專案,玩家妖精沒有出現。事實上它生成了,只不過只出現了一毫秒。你要如何修復一個只出現了一毫秒的東西呢?你可能回想起上一篇文章中,你需要在主迴圈中新增一些東西。為了使玩家的存在時間超過一毫秒,你需要告訴 Python 在每次迴圈中都繪製一次。
將你的迴圈底部的語句更改如下:
world.blit(backdrop, backdropbox) player_list.draw(screen) # 繪製玩家 pygame.display.flip() clock.tick(fps)
現在啟動你的遊戲,你的玩家出現了!
根據你如何建立你的玩家妖精,在它周圍可能會有一個色塊。你所看到的是 alpha 通道應該佔據的空間。它本來是不可見的“顏色”,但 Python 現在還不知道要使它不可見。那麼你所看到的,是圍繞在妖精周圍的邊界區(或現代遊戲術語中的“命中區hit box”)內的空間。
你可以透過設定一個 alpha 通道和 RGB 值來告訴 Python 使哪種顏色不可見。如果你不知道你使用 alpha 通道的影像的 RGB 值,你可以使用 Krita 或 Inkscape 開啟它,並使用一種獨特的顏色,比如 #00ff00(差不多是“綠屏綠”)來填充影像周圍的空白區域。記下顏色對應的十六進位制值(此處為 #00ff00,綠屏綠)並將其作為 alpha 通道用於你的 Python 指令碼。
使用 alpha 通道需要在你的妖精生成相關程式碼中新增如下兩行。類似第一行的程式碼已經存在於你的指令碼中,你只需要新增另外兩行:
img = pygame.image.load(os.path.join('images','hero' + str(i) + '.png')).convert() img.convert_alpha() # 最佳化 alpha img.set_colorkey(ALPHA) # 設定 alpha
除非你告訴它,否則 Python 不知道將哪種顏色作為 alpha 通道。在你程式碼的設定相關區域,新增一些顏色定義。將如下的變數定義新增於你的設定相關區域的任意位置:
ALPHA = (0, 255, 0)
在以上示例程式碼中,0,255,0 被我們使用,它在 RGB 中所代表的值與 #00ff00 在十六進位制中所代表的值相同。你可以透過一個優秀的影像應用程式,如 GIMP、Krita 或 Inkscape,來獲取所有這些顏色值。或者,你可以使用一個優秀的系統級顏色選擇器,如 KColorChooser,來檢測顏色。
如果你的影像應用程式將你的妖精背景渲染成了其他的值,你可以按需調整 ALPHA 變數的值。不論你將 alpha 設為多少,最後它都將“不可見”。RGB 顏色值是非常嚴格的,因此如果你需要將 alpha 設為 000,但你又想將 000 用於你影像中的黑線,你只需要將影像中線的顏色設為 111。這樣一來,(影像中的黑線)就足夠接近黑色,但除了電腦以外沒有人能看出區別。
執行你的遊戲檢視結果。
在 這個系列的第四篇文章 中,我會向你們展示如何使你的妖精動起來。多麼的激動人心啊!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2645671/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 玩家角色——角色跳躍
- 玩家角色——下蹲
- 玩家角色——跳上平臺
- 玩家角色——攀牆跳
- 玩家角色——運動殘影
- 如何檢視oracle使用者具有的許可權和角色Oracle
- python使用魔法函式建立可切片型別Python函式型別
- Python微信操控(itchat)Python
- Oracle使用者角色許可權管理Oracle
- Oracle使用者、許可權、角色管理Oracle
- 小提示:遊戲之中玩家角色的概念(轉)遊戲
- 檢視Oracle使用者的許可權或角色Oracle
- 使用者角色許可權管理架構架構
- [學習]ORACLE使用者、角色、許可權Oracle
- Oracle使用者、許可權、角色管理【轉】Oracle
- Oracle建立使用者、角色、授權、建表Oracle
- 檢視角色裡包含的系統許可權、物件許可權和角色物件
- 如何使用Python建立AI虛擬助手PythonAI
- 吸引玩家的非性感二字,遊戲中女角色,如何包裝才算成功?遊戲
- MongoDB4.0建立自定義許可權(只有查詢,插入和更新的許可權)的角色步驟MongoDB
- 如何以戰鬥為基礎驅動玩家追求更多角色(一)
- 【使用者管理】oracle使用者、角色、許可權管理Oracle
- 常用sql命令@oracle資料型別概括@許可權、角色、使用者的建立於使用@偽列及其注意事項SQLOracle資料型別
- 玩家角色——移動功能和動畫藍圖動畫
- 如何使用 Python 建立一個 NBA 得分圖?Python
- C#如何建立一個可快速重複使用的專案模板C#
- MongoDB 3.2的使用者角色許可權介紹和配置MongoDB
- Oracle使用者及角色的許可權管理[Oracle基礎]Oracle
- 闡述遊戲設計中的玩家角色&自我表達遊戲設計
- Python集合是可變的嗎?rozenset()函式如何使用?Python函式
- SQL Server建立應用程式角色與標準角色SQLServer
- ORACLE角色(通過DBA建立)Oracle
- 玩家角色——攻擊刀光和發射子彈
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- Oracle使用者訪問許可權與PUBLIC角色的關係Oracle訪問許可權
- 新的透鏡:以玩家風格、位置與角色看遊戲遊戲
- oracle匯出使用者、表空間和角色的建立語句Oracle
- 使用者角色許可權控制包 Laravel-permission 使用說明Laravel