自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何在你的Python游戲中添加一個(gè)玩家

開(kāi)發(fā) 后端
在 這個(gè)系列的第一篇文章 中,我解釋了如何使用 Python 創(chuàng)建一個(gè)簡(jiǎn)單的基于文本的骰子游戲。在第二部分中,我向你們展示了如何從頭開(kāi)始構(gòu)建游戲,即從 創(chuàng)建游戲的環(huán)境 開(kāi)始。但是每個(gè)游戲都需要一名玩家,并且每個(gè)玩家都需要一個(gè)可操控的角色,這也就是我們接下來(lái)要在這個(gè)系列的第三部分中需要做的。

[[265864]]

這是用 Python 從頭開(kāi)始構(gòu)建游戲的系列文章的第三部分。

這個(gè)系列的***篇文章 中,我解釋了如何使用 Python 創(chuàng)建一個(gè)簡(jiǎn)單的基于文本的骰子游戲。在第二部分中,我向你們展示了如何從頭開(kāi)始構(gòu)建游戲,即從 創(chuàng)建游戲的環(huán)境 開(kāi)始。但是每個(gè)游戲都需要一名玩家,并且每個(gè)玩家都需要一個(gè)可操控的角色,這也就是我們接下來(lái)要在這個(gè)系列的第三部分中需要做的。

在 Pygame 中,玩家操控的圖標(biāo)或者化身被稱作妖精sprite。如果你現(xiàn)在還沒(méi)有任何可用于玩家妖精的圖像,你可以使用 KritaInkscape 來(lái)自己創(chuàng)建一些圖像。如果你對(duì)自己的藝術(shù)細(xì)胞缺乏自信,你也可以在 OpenClipArt.orgOpenGameArt.org 搜索一些現(xiàn)成的圖像。如果你還未按照上一篇文章所說(shuō)的單***建一個(gè) images 文件夾,那么你需要在你的 Python 項(xiàng)目目錄中創(chuàng)建它。將你想要在游戲中使用的圖片都放 images 文件夾中。

為了使你的游戲真正的刺激,你應(yīng)該為你的英雄使用一張動(dòng)態(tài)的妖精圖片。這意味著你需要繪制更多的素材,并且它們要大不相同。最常見(jiàn)的動(dòng)畫(huà)就是走路循環(huán),通過(guò)一系列的圖像讓你的妖精看起來(lái)像是在走路。走路循環(huán)最快捷粗糙的版本需要四張圖像。

[[265865]]

注意:這篇文章中的代碼示例同時(shí)兼容靜止的和動(dòng)態(tài)的玩家妖精。

將你的玩家妖精命名為 hero.png。如果你正在創(chuàng)建一個(gè)動(dòng)態(tài)的妖精,則需要在名字后面加上一個(gè)數(shù)字,從 hero1.png 開(kāi)始。

創(chuàng)建一個(gè) Python 類

在 Python 中,當(dāng)你在創(chuàng)建一個(gè)你想要顯示在屏幕上的對(duì)象時(shí),你需要?jiǎng)?chuàng)建一個(gè)類。

在你的 Python 腳本靠近頂端的位置,加入如下代碼來(lái)創(chuàng)建一個(gè)玩家。在以下的代碼示例中,前三行已經(jīng)在你正在處理的 Python 腳本中:

  1. import pygame
  2. import sys
  3. import os # 以下是新代碼
  4.  
  5. class Player(pygame.sprite.Sprite):
  6.     '''
  7.     生成一個(gè)玩家
  8.     '''
  9.     def __init__(self):
  10.         pygame.sprite.Sprite.__init__(self)
  11.         self.images = []
  12.     img = pygame.image.load(os.path.join('images','hero.png')).convert()
  13.     self.images.append(img)
  14.     self.image = self.images[0]
  15.     self.rect  = self.image.get_rect()

如果你的可操控角色擁有一個(gè)走路循環(huán),在 images 文件夾中將對(duì)應(yīng)圖片保存為 hero1.pnghero4.png 的獨(dú)立文件。

使用一個(gè)循環(huán)來(lái)告訴 Python 遍歷每個(gè)文件。

  1. '''
  2. 對(duì)象
  3. '''
  4.  
  5. class Player(pygame.sprite.Sprite):
  6.     '''
  7.     生成一個(gè)玩家
  8.     '''
  9.     def __init__(self):
  10.         pygame.sprite.Sprite.__init__(self)
  11.         self.images = []
  12.         for i in range(1,5):
  13.             img = pygame.image.load(os.path.join('images','hero' + str(i) + '.png')).convert()
  14.             self.images.append(img)
  15.             self.image = self.images[0]
  16.             self.rect  = self.image.get_rect()

將玩家?guī)胗螒蚴澜?/h3>

現(xiàn)在已經(jīng)創(chuàng)建好了一個(gè) Player 類,你需要使用它在你的游戲世界中生成一個(gè)玩家妖精。如果你不調(diào)用 Player 類,那它永遠(yuǎn)不會(huì)起作用,(游戲世界中)也就不會(huì)有玩家。你可以通過(guò)立馬運(yùn)行你的游戲來(lái)驗(yàn)證一下。游戲會(huì)像上一篇文章末尾看到的那樣運(yùn)行,并得到明確的結(jié)果:一個(gè)空蕩蕩的游戲世界。

為了將一個(gè)玩家妖精帶到你的游戲世界,你必須通過(guò)調(diào)用 Player 類來(lái)生成一個(gè)妖精,并將它加入到 Pygame 的妖精組中。在如下的代碼示例中,前三行是已經(jīng)存在的代碼,你需要在其后添加代碼:

  1. world       = pygame.display.set_mode([worldx,worldy])
  2. backdrop    = pygame.image.load(os.path.join('images','stage.png')).convert()
  3. backdropbox = screen.get_rect()
  4.  
  5. # 以下是新代碼
  6.  
  7. player = Player()   # 生成玩家
  8. player.rect.x = 0   # 移動(dòng) x 坐標(biāo)
  9. player.rect.y = 0   # 移動(dòng) y 坐標(biāo)
  10. player_list = pygame.sprite.Group()
  11. player_list.add(player)

嘗試啟動(dòng)你的游戲來(lái)看看發(fā)生了什么。高能預(yù)警:它不會(huì)像你預(yù)期的那樣工作,當(dāng)你啟動(dòng)你的項(xiàng)目,玩家妖精沒(méi)有出現(xiàn)。事實(shí)上它生成了,只不過(guò)只出現(xiàn)了一毫秒。你要如何修復(fù)一個(gè)只出現(xiàn)了一毫秒的東西呢?你可能回想起上一篇文章中,你需要在主循環(huán)中添加一些東西。為了使玩家的存在時(shí)間超過(guò)一毫秒,你需要告訴 Python 在每次循環(huán)中都繪制一次。

將你的循環(huán)底部的語(yǔ)句更改如下:

  1.     world.blit(backdrop, backdropbox)
  2.     player_list.draw(screen) # 繪制玩家
  3.     pygame.display.flip()
  4.     clock.tick(fps)

現(xiàn)在啟動(dòng)你的游戲,你的玩家出現(xiàn)了!

設(shè)置 alpha 通道

根據(jù)你如何創(chuàng)建你的玩家妖精,在它周?chē)赡軙?huì)有一個(gè)色塊。你所看到的是 alpha 通道應(yīng)該占據(jù)的空間。它本來(lái)是不可見(jiàn)的“顏色”,但 Python 現(xiàn)在還不知道要使它不可見(jiàn)。那么你所看到的,是圍繞在妖精周?chē)倪吔鐓^(qū)(或現(xiàn)代游戲術(shù)語(yǔ)中的“***區(qū)hit box”)內(nèi)的空間。

[[265866]]

你可以通過(guò)設(shè)置一個(gè) alpha 通道和 RGB 值來(lái)告訴 Python 使哪種顏色不可見(jiàn)。如果你不知道你使用 alpha 通道的圖像的 RGB 值,你可以使用 Krita 或 Inkscape 打開(kāi)它,并使用一種獨(dú)特的顏色,比如 #00ff00(差不多是“綠屏綠”)來(lái)填充圖像周?chē)目瞻讌^(qū)域。記下顏色對(duì)應(yīng)的十六進(jìn)制值(此處為 #00ff00,綠屏綠)并將其作為 alpha 通道用于你的 Python 腳本。

使用 alpha 通道需要在你的妖精生成相關(guān)代碼中添加如下兩行。類似***行的代碼已經(jīng)存在于你的腳本中,你只需要添加另外兩行:

  1.             img = pygame.image.load(os.path.join('images','hero' + str(i) + '.png')).convert()
  2.             img.convert_alpha()     # 優(yōu)化 alpha
  3.             img.set_colorkey(ALPHA) # 設(shè)置 alpha

除非你告訴它,否則 Python 不知道將哪種顏色作為 alpha 通道。在你代碼的設(shè)置相關(guān)區(qū)域,添加一些顏色定義。將如下的變量定義添加于你的設(shè)置相關(guān)區(qū)域的任意位置:

  1. ALPHA = (0, 255, 0)

在以上示例代碼中,0,255,0 被我們使用,它在 RGB 中所代表的值與 #00ff00 在十六進(jìn)制中所代表的值相同。你可以通過(guò)一個(gè)優(yōu)秀的圖像應(yīng)用程序,如 GIMP、Krita 或 Inkscape,來(lái)獲取所有這些顏色值?;蛘撸憧梢允褂靡粋€(gè)優(yōu)秀的系統(tǒng)級(jí)顏色選擇器,如 KColorChooser,來(lái)檢測(cè)顏色。

如果你的圖像應(yīng)用程序?qū)⒛愕难尘颁秩境闪似渌闹担憧梢园葱枵{(diào)整 ALPHA 變量的值。不論你將 alpha 設(shè)為多少,***它都將“不可見(jiàn)”。RGB 顏色值是非常嚴(yán)格的,因此如果你需要將 alpha 設(shè)為 000,但你又想將 000 用于你圖像中的黑線,你只需要將圖像中線的顏色設(shè)為 111。這樣一來(lái),(圖像中的黑線)就足夠接近黑色,但除了電腦以外沒(méi)有人能看出區(qū)別。

運(yùn)行你的游戲查看結(jié)果。

[[265867]]

這個(gè)系列的第四篇文章 中,我會(huì)向你們展示如何使你的妖精動(dòng)起來(lái)。多么的激動(dòng)人心啊! 

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2020-11-30 14:00:16

Python游戲編程語(yǔ)言

2019-05-21 21:36:42

Python編程語(yǔ)言游戲

2020-01-14 12:05:20

Python游戲引力

2020-11-30 13:33:25

Python平臺(tái)類游戲編程語(yǔ)言

2022-01-12 10:37:09

區(qū)塊鏈技術(shù)金融

2010-02-01 14:48:43

2022-02-22 14:43:16

區(qū)塊鏈游戲加密貨幣

2022-09-07 10:20:05

Python裝飾類

2021-03-24 20:30:15

AndroidPython學(xué)習(xí)

2018-11-12 10:30:03

CentOSLinux倉(cāng)庫(kù)

2018-09-08 09:05:00

UbuntuLinuxIP地址

2019-02-11 10:46:16

搜索Linux

2024-09-24 16:30:17

數(shù)據(jù)飛輪游戲

2020-04-06 11:56:04

黑客網(wǎng)絡(luò)威脅網(wǎng)絡(luò)攻擊

2015-08-11 08:51:40

游戲死亡

2010-03-11 18:57:17

Python腳本

2010-07-27 09:44:16

HTML 5

2020-02-20 20:51:09

FedoraLinux播放音樂(lè)

2021-01-01 19:30:21

Python編程語(yǔ)言

2011-08-24 11:14:25

LUA 游戲
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)