教你如何在Pygame 中移動(dòng)你的游戲角色
Pygame是一組跨平臺(tái)的 Python 模塊,專為編寫視頻游戲而設(shè)計(jì)。它包括旨在與 Python 編程語(yǔ)言一起使用的計(jì)算機(jī)圖形和聲音庫(kù)。您可以使用 pygame 創(chuàng)建不同類型的游戲,包括街機(jī)游戲、平臺(tái)游戲等等。
使用的圖像:
你可以控制玩家的移動(dòng)。為此,首先使用 pygame 的 display.set_mode() 方法創(chuàng)建一個(gè)顯示對(duì)象,并使用 pygame 的 image.load() 方法添加玩家的精靈。set_mode() 函數(shù)用于初始化顯示表面或窗口。size 參數(shù)是一對(duì)代表寬度和高度的數(shù)字。flags 參數(shù)是附加選項(xiàng)的集合。depth 參數(shù)表示用于顏色的位數(shù)。
語(yǔ)法:
set_mode(size=(0, 0), flags=0, depth=0, display=0, vsync=0)
創(chuàng)建一個(gè)變量來存儲(chǔ)玩家的速度。設(shè)置玩家的初始坐標(biāo)?,F(xiàn)在,根據(jù)鍵盤事件(即鍵狀態(tài)改變時(shí)發(fā)生的事件)更改播放器的 x 和 y 坐標(biāo)。
blit(surface,surfacerect) 函數(shù)用于在屏幕上繪制圖像。
語(yǔ)法:
blit(surface, surfacerect)
為了從隊(duì)列中收集所有事件,使用事件模塊的 get() 函數(shù),然后我們使用 for 循環(huán)迭代所有事件。
語(yǔ)法:
get(eventtype=None)
使用顯示模塊的 update() 函數(shù)更新屏幕。
語(yǔ)法:
update(rectangle=None)
下面是實(shí)現(xiàn)
示例:玩家移動(dòng)程序
# 導(dǎo)入 pygame 模塊 import pygame from pygame.locals import * # 啟動(dòng) pygame 并授予使用 pygame 功能的權(quán)限 pygame.init() # 創(chuàng)建特定尺寸的顯示面對(duì)象 window = pygame.display.set_mode((600, 600)) # 在窗口中添加標(biāo)題 pygame.display.set_caption('Player Movement') # 添加玩家精靈 image = pygame.image.load(r'haiyong.png') # 將玩家的初始坐標(biāo)存儲(chǔ)在兩個(gè)變量中,即 x 和 y x = 100 y = 100 # 創(chuàng)建一個(gè)變量來存儲(chǔ)玩家移動(dòng)的速度 velocity = 12 # 創(chuàng)建無限循環(huán) run = True while run: # 用白色填充背景 window.fill((255, 255, 255)) # 在 x 和 y 坐標(biāo)處顯示玩家精靈 window.blit(image, (x, y)) # 迭代 pygame.event.get() 方法返回的 Event 對(duì)象列表。 for event in pygame.event.get(): # 如果事件類型為 QUIT,則關(guān)閉窗口和程序 if event.type == pygame.QUIT: run = False pygame.quit() quit() # 如果事件類型為 KEYDOWN,即按下鍵盤按鈕,則檢查事件鍵 if event.type == pygame.KEYDOWN: # 如果按下的按鈕是左箭頭鍵,則減小 x 坐標(biāo) if event.key == pygame.K_LEFT: x -= velocity # 如果按下的按鈕是右箭頭鍵,則增加 x 坐標(biāo) if event.key == pygame.K_RIGHT: x += velocity # 如果按下按鈕是向上箭頭鍵,則減小 y 坐標(biāo) if event.key == pygame.K_UP: y -= velocity # 如果按下按鈕是向下箭頭鍵,則增加 y 坐標(biāo) if event.key == pygame.K_DOWN: y += velocity # 將表面對(duì)象繪制到屏幕上 pygame.display.update()
輸出:
玩家也可以連續(xù)移動(dòng)。為此,除了要進(jìn)行一些更改外,其他一切都保持不變。在這里,我們創(chuàng)建了一個(gè)新的時(shí)鐘對(duì)象來使用 clock() 控制游戲的幀速率。
語(yǔ)法
Clock()
創(chuàng)建一個(gè)新變量(名為 key_pressed_is)來存儲(chǔ)用戶按下的鍵。為此,我們使用 key 模塊的 get_pressed() 函數(shù)。
語(yǔ)法
get_pressed()
它返回一個(gè)布爾值序列,表示鍵盤上每個(gè)鍵的狀態(tài)。
示例:連續(xù)移動(dòng)玩家
# 導(dǎo)入 pygame 模塊 import pygame from pygame.locals import * # 啟動(dòng) pygame 并授予使用 pygame 功能的權(quán)限 pygame.init() # 創(chuàng)建特定尺寸的顯示面對(duì)象 window = pygame.display.set_mode((600, 600)) # 在窗口中添加標(biāo)題 pygame.display.set_caption('玩家移動(dòng)') # 初始化時(shí)鐘 時(shí)鐘用于跟蹤和控制游戲的幀速率 clock = pygame.time.Clock() # 添加玩家精靈 image = pygame.image.load(r'haiyong.png') # 將玩家的初始坐標(biāo)存儲(chǔ)在兩個(gè)變量中,即 x 和 y x = 100 y = 100 # 創(chuàng)建一個(gè)變量來存儲(chǔ)玩家移動(dòng)的速度 velocity = 12 # 創(chuàng)建無限循環(huán) run = True while run: # 將幀速率設(shè)置為 60 fps clock.tick(60) # 用白色填充背景 window.fill((255, 255, 255)) # 在 x 和 y 坐標(biāo)處顯示玩家精靈 window.blit(image, (x, y)) # 迭代 pygame.event.get() 方法返回的 Event 對(duì)象列表。 for event in pygame.event.get(): # 如果事件類型為 QUIT,則關(guān)閉窗口和程序 if event.type == pygame.QUIT: run = False pygame.quit() quit() # 使用 key.get_pressed() 方法將按下的鍵存儲(chǔ)在新變量中 key_pressed_is = pygame.key.get_pressed() # 改變玩家坐標(biāo) if key_pressed_is[K_LEFT]: x -= 8 if key_pressed_is[K_RIGHT]: x += 8 if key_pressed_is[K_UP]: y -= 8 if key_pressed_is[K_DOWN]: y += 8 # 將表面對(duì)象繪制到屏幕上 pygame.display.update()
輸出:
翻轉(zhuǎn)玩家精靈
您可以使用 pygame 的轉(zhuǎn)換模塊的 flip() 函數(shù)輕松翻轉(zhuǎn)任何精靈。例如,如果我們想在玩家改變移動(dòng)方向時(shí)翻轉(zhuǎn)精靈,那么我們可以使用下面的代碼
window.blit(pygame.transform.flip(image, False, True), (x,y))
flip() 函數(shù)用于水平、垂直翻轉(zhuǎn)表面對(duì)象。 或兩者。 這個(gè)函數(shù)有三個(gè)參數(shù):
- 要翻轉(zhuǎn)的圖像
- 進(jìn)行水平翻轉(zhuǎn)的布爾值
- 進(jìn)行垂直翻轉(zhuǎn)的布爾值
下面是實(shí)現(xiàn)。
示例:翻轉(zhuǎn)播放器圖像
輸出:
我們還可以通過創(chuàng)建精靈列表輕松更新玩家精靈。
image = [pygame.image.load(r'haiyong.png'), pygame.image.load(r'haiyong2.png')]
示例:更新精靈
# 導(dǎo)入 pygame 模塊 import pygame from pygame.locals import * # 啟動(dòng) pygame 并授予使用 pygame 功能的權(quán)限 pygame.init() # 創(chuàng)建特定尺寸的顯示面對(duì)象 window = pygame.display.set_mode((600, 600)) # 在窗口中添加標(biāo)題 pygame.display.set_caption('玩家切換') # 初始化時(shí)鐘 時(shí)鐘用于跟蹤和控制游戲的幀速率 clock = pygame.time.Clock() # 創(chuàng)建一個(gè)變量來檢查運(yùn)動(dòng)方向 # 每當(dāng)玩家改變方向時(shí),我們就會(huì)改變它的值 direction = True # 在列表中添加玩家精靈 image = [pygame.image.load(r'haiyong.png'), pygame.image.load(r'haiyong2.png')] # 將玩家的初始坐標(biāo)存儲(chǔ)在兩個(gè)變量中,即 x 和 y x = 100 y = 100 # 創(chuàng)建一個(gè)變量來存儲(chǔ)玩家移動(dòng)的速度 velocity = 12 # 創(chuàng)建無限循環(huán) run = True while run: # 將幀速率設(shè)置為 60 fps clock.tick(60) # 用淺灰藍(lán)色填充背景 window.fill((176, 224, 230)) # 在 x 和 y 坐標(biāo)處顯示玩家精靈 # 如果玩家改變方向,則改變玩家精靈 if direction == True: window.blit(image[0], (x, y)) if direction == False: window.blit(image[1], (x, y)) # 迭代 pygame.event.get() 方法返回的 Event 對(duì)象列表。 for event in pygame.event.get(): # 如果事件類型為 QUIT,則關(guān)閉窗口和程序 if event.type == pygame.QUIT: run = False pygame.quit() quit() # 改變方向變量的值 if event.type == pygame.KEYDOWN: if event.key == pygame.K_RIGHT: direction = True elif event.key == pygame.K_LEFT: direction = False # 使用 key.get_pressed() 方法將按下的鍵存儲(chǔ)在新變量中 key_pressed_is = pygame.key.get_pressed() # 改變玩家坐標(biāo) if key_pressed_is[K_LEFT]: x -= 5 if key_pressed_is[K_RIGHT]: x += 5 if key_pressed_is[K_UP]: y -= 5 if key_pressed_is[K_DOWN]: y += 5 # 將表面對(duì)象繪制到屏幕上 pygame.display.update()
換張圖試試
到此這篇關(guān)于教你如何在Pygame 中移動(dòng)你的游戲角色的文章就介紹到這了,更多相關(guān)Pygame移動(dòng)游戲角色內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
?分享4款Python 自動(dòng)數(shù)據(jù)分析神器
這篇文章主要給大家分享的是4款Python 自動(dòng)數(shù)據(jù)分析神器,我給大家分享 4 款常用的EDA工具,它們可以自動(dòng)產(chǎn)出統(tǒng)計(jì)數(shù)據(jù)和圖表,為我們節(jié)省大量時(shí)間,需要的朋友可以參考一下2022-03-03使用Python代碼進(jìn)行PowerPoint演示文稿的合并與拆分
多個(gè)PowerPoint演示文稿的處理可能會(huì)成為非常麻煩的工作,有時(shí)需要將多個(gè)演示文稿合并為一個(gè)演示文稿,從而不用在演示時(shí)重復(fù)打開演示文稿,本文我們可以使用Python代碼來快速、準(zhǔn)確的執(zhí)行PowerPoint演示文稿的合并于拆分操作,需要的朋友可以參考下2024-03-03為何你的Python代碼在Notepad++中只閃現(xiàn)一下就消失無蹤?
你是否曾在Notepad++中運(yùn)行編寫的Python代碼,卻發(fā)現(xiàn)它們瞬間消失無蹤?別擔(dān)心,這不是你的幻覺,在這篇指南中,我們將揭秘這一現(xiàn)象背后的原因,并教你如何輕松解決,讓我們一起揭開這個(gè)謎團(tuán),讓你的Python代碼在Notepad++中安然無恙吧!2024-02-02Python編程實(shí)現(xiàn)生成特定范圍內(nèi)不重復(fù)多個(gè)隨機(jī)數(shù)的2種方法
這篇文章主要介紹了Python編程實(shí)現(xiàn)生成特定范圍內(nèi)不重復(fù)多個(gè)隨機(jī)數(shù)的2種方法,涉及Python基于random生成隨機(jī)數(shù)的常見操作技巧,需要的朋友可以參考下2017-04-04Django 404、500頁(yè)面全局配置知識(shí)點(diǎn)詳解
在本篇文章里小編給大家整理了關(guān)于Django 404、500頁(yè)面全局配置知識(shí)點(diǎn)詳解,需要的朋友們可以學(xué)習(xí)下。2020-03-03Python基于進(jìn)程池實(shí)現(xiàn)多進(jìn)程過程解析
這篇文章主要介紹了Python基于進(jìn)程池實(shí)現(xiàn)多進(jìn)程過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04