溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python 中怎么創(chuàng)建一名可操控的角色玩家

發(fā)布時(shí)間:2021-07-10 17:15:31 來(lái)源:億速云 閱讀:165 作者:Leah 欄目:編程語(yǔ)言

今天就跟大家聊聊有關(guān) Python 中怎么創(chuàng)建一名可操控的角色玩家,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

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

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

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

import pygame
import sys
import os # 以下是新代碼
class Player(pygame.sprite.Sprite):
    '''
    生成一個(gè)玩家
    '''
    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()

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

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

'''
對(duì)象
'''
class Player(pygame.sprite.Sprite):
    '''
    生成一個(gè)玩家
    '''
    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()

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

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

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

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   # 移動(dòng) x 坐標(biāo)
player.rect.y = 0   # 移動(dòng) y 坐標(biāo)
player_list = pygame.sprite.Group()
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ǔ)句更改如下:

    world.blit(backdrop, backdropbox)
    player_list.draw(screen) # 繪制玩家
    pygame.display.flip()
    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)的空間。

Python 中怎么創(chuàng)建一名可操控的角色玩家

你可以通過(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)代碼中添加如下兩行。類(lèi)似第一行的代碼已經(jīng)存在于你的腳本中,你只需要添加另外兩行:

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

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

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è)顏色。

Python 中怎么創(chuàng)建一名可操控的角色玩家

看完上述內(nèi)容,你們對(duì) Python 中怎么創(chuàng)建一名可操控的角色玩家有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI