Python pygame 項(xiàng)目實(shí)戰(zhàn)事件監(jiān)聽(tīng)
1. 在游戲循環(huán)中監(jiān)聽(tīng)事件
事件event:
- 就是游戲啟動(dòng)后,用戶(hù)針對(duì)游戲所做的操作
- 例如:點(diǎn)擊關(guān)閉按鈕,點(diǎn)擊鼠標(biāo),按下鍵盤(pán)
監(jiān)聽(tīng):
- 在游戲循環(huán)中,判斷用戶(hù)具體操作
- 只有捕獲到用戶(hù)具體的操作,才能有針對(duì)性的做出響應(yīng)
- 簡(jiǎn)而言之,在游戲循環(huán)中編寫(xiě)一小段代碼,通過(guò)這一小段代碼,判斷用戶(hù)的具體操作行為,這個(gè)就叫做監(jiān)聽(tīng)
代碼實(shí)現(xiàn):
- pygame中通過(guò)
pygame.event.get()可以獲得用戶(hù)當(dāng)前所做動(dòng)作的事件列表(因?yàn)橥粫r(shí)間用戶(hù)所作的操作可能會(huì)有很多件) - 用戶(hù)可以同一時(shí)間做很多事情
- 提示:這段代碼非常的固定,幾乎所有的pygame游戲都大同小異!
2. 案例演示
2.1 案例概覽
本節(jié),我們將在上一小節(jié)的基礎(chǔ)上(詳情請(qǐng)見(jiàn)本專(zhuān)欄上一篇文章),完成捕獲用戶(hù)所做的動(dòng)作事件列表。
以下代碼中,使用了pygame.event.get()方法,get方法返回的類(lèi)型為列表類(lèi)型,因此,我們使用event_list變量來(lái)接收get方法返回的結(jié)果。但是,如果僅僅是這樣改造代碼,運(yùn)行時(shí)在程序控制臺(tái)輸出了很多空的列表。因此,我們可以考慮增加if判斷,判斷是否用戶(hù)進(jìn)行了操作事件(是否有操作事件發(fā)生)。此時(shí),再運(yùn)行程序,就可以輸出很多操作細(xì)節(jié)了。(可以移動(dòng)鼠標(biāo)或者按下鍵盤(pán)試試),控制臺(tái)會(huì)輸出捕獲的用戶(hù)操作。
import pygame
pygame.init()
# 創(chuàng)建游戲的窗口 640*642
screen = pygame.display.set_mode((640, 642))
# 繪制背景圖像
bg = pygame.image.load("./飛機(jī)大戰(zhàn)資料包/images/background1.jpg")
screen.blit(bg, (0, 0))
# 繪制英雄的飛機(jī)
hero = pygame.image.load("./飛機(jī)大戰(zhàn)資料包/images/me1.png")
screen.blit(hero, (280, 500))
# 可以在所有繪制工作完成之后,統(tǒng)一調(diào)用update方法
pygame.display.update()
# 創(chuàng)建時(shí)鐘對(duì)象
clock = pygame.time.Clock()
# 游戲循環(huán)->意味著游戲的正式開(kāi)始
# 1. 定義rect記錄飛機(jī)的初始位置
hero_rect = pygame.Rect(280, 500, 102, 126)
# 游戲循環(huán)->意味著游戲的正式開(kāi)始
while True:
# 希望無(wú)限循環(huán)內(nèi)部的代碼每秒鐘重復(fù)循環(huán)60次
# 可以指定循環(huán)體內(nèi)部的代碼執(zhí)行的頻率
clock.tick(60)
# 捕獲事件
event_list = pygame.event.get()
if len(event_list) > 0:
print(event_list)
# 2. 修改飛機(jī)的位置
hero_rect.y -= 1
# 判斷飛機(jī)的位置
if hero_rect.y <= -126:
hero_rect.y = 642
# 3. 調(diào)用blit方法繪制圖像
# 先繪制背景,在繪制飛機(jī),就不會(huì)留下殘影(背景把上一次的飛機(jī)遮擋)
screen.blit(bg, (0, 0))
screen.blit(hero, hero_rect)
# 4. 調(diào)用update方法更新顯示
pygame.display.update()
pygame.quit()2.2 運(yùn)行結(jié)果
運(yùn)行結(jié)果如下所示:


到此這篇關(guān)于Python pygame 項(xiàng)目實(shí)戰(zhàn)事件監(jiān)聽(tīng)的文章就介紹到這了,更多相關(guān)Python事件監(jiān)聽(tīng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python?pygame實(shí)現(xiàn)五子棋雙人聯(lián)機(jī)
- Python+Pygame實(shí)現(xiàn)經(jīng)典魂斗羅游戲
- python?pygame實(shí)現(xiàn)打磚塊游戲
- Python+Pygame實(shí)現(xiàn)趣味足球游戲
- Python+Pygame實(shí)現(xiàn)神廟逃亡游戲
- Python?pygame新手入門(mén)基礎(chǔ)教程
- Python+Pygame實(shí)現(xiàn)之走四棋兒游戲的實(shí)現(xiàn)
- Python?pygame項(xiàng)目實(shí)戰(zhàn)監(jiān)聽(tīng)退出事件
相關(guān)文章
python深度學(xué)習(xí)標(biāo)準(zhǔn)庫(kù)使用argparse調(diào)參
這篇文章主要為大家介紹了python深度學(xué)習(xí)標(biāo)準(zhǔn)庫(kù)使用argparse調(diào)參實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
PyQt5?python?數(shù)據(jù)庫(kù)?表格動(dòng)態(tài)增刪改詳情
這篇文章主要介紹了PyQt5?python?數(shù)據(jù)庫(kù)?表格動(dòng)態(tài)增刪改詳情,首先手動(dòng)連接數(shù)據(jù)庫(kù)與下一個(gè)的程序連接數(shù)據(jù)庫(kù)是獨(dú)立的2個(gè)部分,下面來(lái)看看文章的詳細(xì)介紹2022-01-01
Python MySQL 日期時(shí)間格式化作為參數(shù)的操作
這篇文章主要介紹了Python MySQL 日期時(shí)間格式化作為參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
Python機(jī)器學(xué)習(xí)之使用Pyecharts制作可視化大屏
pyecharts是一個(gè)用于生成Echarts圖表的Python庫(kù),Echarts是百度開(kāi)源的一個(gè)數(shù)據(jù)可視化 JS 庫(kù),可以生成一些非??犰诺膱D表,這篇文章主要給大家介紹了關(guān)于Python機(jī)器學(xué)習(xí)之Pyecharts制作可視化大屏的相關(guān)資料,需要的朋友可以參考下2021-10-10
使用Python Flask構(gòu)建輕量級(jí)靈活的Web應(yīng)用實(shí)例探究
Flask是一個(gè)流行的Python Web框架,以其輕量級(jí)、靈活和易學(xué)的特性受到開(kāi)發(fā)者的喜愛(ài),本文將深入探討Flask框架的各個(gè)方面,通過(guò)詳實(shí)的示例代碼,幫助大家更全面地了解和掌握這一強(qiáng)大的工具,2024-01-01
python實(shí)現(xiàn)用類(lèi)讀取文件數(shù)據(jù)并計(jì)算矩形面積
今天小編就為大家分享一篇python實(shí)現(xiàn)用類(lèi)讀取文件數(shù)據(jù)并計(jì)算矩形面積,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
Keras中的多分類(lèi)損失函數(shù)用法categorical_crossentropy
這篇文章主要介紹了Keras中的多分類(lèi)損失函數(shù)用法categorical_crossentropy,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06

