Python?pygame項(xiàng)目實(shí)戰(zhàn)監(jiān)聽退出事件
1. 事件監(jiān)聽
首先,我們簡(jiǎn)單回顧一下事件監(jiān)聽,可以簡(jiǎn)單概括如下:
- 在游戲循環(huán)中,我們希望判斷用戶具體操作
- 只有捕獲到用戶具體的操作,才能有針對(duì)性的做出響應(yīng)
- 簡(jiǎn)而言之,在游戲循環(huán)中編寫一小段代碼,通過(guò)這一小段代碼,判斷用戶的具體操作行為,這個(gè)就叫做監(jiān)聽
注意:我們想在游戲中實(shí)現(xiàn)監(jiān)聽退出事件并且退出游戲,其實(shí)代碼非常固定(代碼形式都差不多),因?yàn)閹缀跛械膒ygame游戲都大同小異。
2. 案例演示
2.1 案例大體思路
代碼實(shí)現(xiàn)大體思路:首先,我們考慮在游戲循環(huán)內(nèi)部再增加一個(gè)for循環(huán),來(lái)檢測(cè)一下當(dāng)前這一時(shí)刻到底發(fā)生了哪些事件。然后,在循環(huán)體內(nèi)部,再增加一個(gè)條件判斷,判斷一下事件類型是否是pygame定義的QUIT事件(對(duì)應(yīng)的就是用戶點(diǎn)擊的關(guān)閉按鈕)。一旦發(fā)現(xiàn)用戶點(diǎn)擊關(guān)閉按鈕,我們就可以在if語(yǔ)句下方,編寫代碼退出程序。
pygame.QUIT方法可以將所有pygame的模塊做一個(gè)卸載。exit()將當(dāng)前執(zhí)行的程序直接退出,將當(dāng)前正在執(zhí)行的程序做一個(gè)終止。
2.2 代碼演示
具體代碼演示如下所示:可以在上一節(jié)(本專欄上一篇文章)中代碼的基礎(chǔ)上進(jìn)行修改。
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)->意味著游戲的正式開始
# 1. 定義rect記錄飛機(jī)的初始位置
hero_rect = pygame.Rect(280, 500, 102, 126)
# 游戲循環(huán)->意味著游戲的正式開始
while True:
# 希望無(wú)限循環(huán)內(nèi)部的代碼每秒鐘重復(fù)循環(huán)60次
# 可以指定循環(huán)體內(nèi)部的代碼執(zhí)行的頻率
clock.tick(60)
# 監(jiān)聽事件
for event in pygame.event.get():
# 判斷事件類型是否是退出事件
if event.type == pygame.QUIT:
print("游戲退出...")
# quit卸載所有的模塊
pygame.quit()
# exit()直接終止當(dāng)前正在執(zhí)行的程序
exit()
# 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.3 運(yùn)行結(jié)果
代碼運(yùn)行結(jié)果如下圖所示:當(dāng)運(yùn)行程序后,點(diǎn)擊退出按鈕,可以正常終止屏幕中的游戲畫面,并且在控制臺(tái)輸出如下圖結(jié)果。

到此這篇關(guān)于Python pygame項(xiàng)目實(shí)戰(zhàn)監(jiān)聽退出事件的文章就介紹到這了,更多相關(guān)Python 監(jiān)聽退出事件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django Channels 實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)實(shí)時(shí)聊天和消息推送功能
這篇文章主要介紹了Django Channels 實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)實(shí)時(shí)聊天和消息推送功能,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
用Python做一個(gè)簡(jiǎn)單的圖書管理系統(tǒng)
這篇文章主要介紹了用Python做一個(gè)簡(jiǎn)單的圖書管理系統(tǒng),有“還書““借閱”“添加書籍”等功能,文中提供了部分實(shí)現(xiàn)代碼和解決思路,有一定的參考價(jià)值,需要的朋友快來(lái)一起看看吧2023-04-04
11個(gè)案例講透Python函數(shù)參數(shù)小結(jié)
本文主要介紹了11個(gè)案例講透Python函數(shù)參數(shù)小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Python 多進(jìn)程和數(shù)據(jù)傳遞的理解
這篇文章主要介紹了Python 多進(jìn)程和數(shù)據(jù)傳遞的理解的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-10-10
Python開發(fā)之QT解決無(wú)邊框界面拖動(dòng)卡屏問(wèn)題(附帶源碼)
朋友在學(xué)習(xí)QT的過(guò)程中,都會(huì)遇到各種問(wèn)題,今天就QT無(wú)邊框拖動(dòng)花屏問(wèn)題給大家詳細(xì)介紹,究竟該如何解決呢,下面通過(guò)實(shí)例代碼和圖文相結(jié)合給大家詳細(xì)介紹,需要的朋友參考下吧2021-05-05
python 實(shí)現(xiàn)列表的切片操作允許索引超出范圍
這篇文章主要介紹了python 實(shí)現(xiàn)列表的切片操作允許索引超出范圍,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05

