網站首頁 編程語言 正文
1. 事件監聽
首先,我們簡單回顧一下事件監聽,可以簡單概括如下:
- 在游戲循環中,我們希望判斷用戶具體操作
- 只有捕獲到用戶具體的操作,才能有針對性的做出響應
- 簡而言之,在游戲循環中編寫一小段代碼,通過這一小段代碼,判斷用戶的具體操作行為,這個就叫做監聽
注意:我們想在游戲中實現監聽退出事件并且退出游戲,其實代碼非常固定(代碼形式都差不多),因為幾乎所有的pygame游戲都大同小異。
2. 案例演示
2.1 案例大體思路
代碼實現大體思路:首先,我們考慮在游戲循環內部再增加一個for循環,來檢測一下當前這一時刻到底發生了哪些事件。然后,在循環體內部,再增加一個條件判斷,判斷一下事件類型是否是pygame定義的QUIT事件(對應的就是用戶點擊的關閉按鈕)。一旦發現用戶點擊關閉按鈕,我們就可以在if語句下方,編寫代碼退出程序。
-
pygame.QUIT
方法可以將所有pygame的模塊做一個卸載。 -
exit()
將當前執行的程序直接退出,將當前正在執行的程序做一個終止。
2.2 代碼演示
具體代碼演示如下所示:可以在上一節(本專欄上一篇文章)中代碼的基礎上進行修改。
import pygame pygame.init() # 創建游戲的窗口 640*642 screen = pygame.display.set_mode((640, 642)) # 繪制背景圖像 bg = pygame.image.load("./飛機大戰資料包/images/background1.jpg") screen.blit(bg, (0, 0)) # 繪制英雄的飛機 hero = pygame.image.load("./飛機大戰資料包/images/me1.png") screen.blit(hero, (280, 500)) # 可以在所有繪制工作完成之后,統一調用update方法 pygame.display.update() # 創建時鐘對象 clock = pygame.time.Clock() # 游戲循環->意味著游戲的正式開始 # 1. 定義rect記錄飛機的初始位置 hero_rect = pygame.Rect(280, 500, 102, 126) # 游戲循環->意味著游戲的正式開始 while True: # 希望無限循環內部的代碼每秒鐘重復循環60次 # 可以指定循環體內部的代碼執行的頻率 clock.tick(60) # 監聽事件 for event in pygame.event.get(): # 判斷事件類型是否是退出事件 if event.type == pygame.QUIT: print("游戲退出...") # quit卸載所有的模塊 pygame.quit() # exit()直接終止當前正在執行的程序 exit() # 2. 修改飛機的位置 hero_rect.y -= 1 # 判斷飛機的位置 if hero_rect.y <= -126: hero_rect.y = 642 # 3. 調用blit方法繪制圖像 # 先繪制背景,在繪制飛機,就不會留下殘影(背景把上一次的飛機遮擋) screen.blit(bg, (0, 0)) screen.blit(hero, hero_rect) # 4. 調用update方法更新顯示 pygame.display.update() pygame.quit()
2.3 運行結果
代碼運行結果如下圖所示:當運行程序后,點擊退出按鈕,可以正常終止屏幕中的游戲畫面,并且在控制臺輸出如下圖結果。
原文鏈接:https://juejin.cn/post/7131737672023801886
相關推薦
- 2022-10-25 一文搞懂Golang中iota的用法和原理_Golang
- 2022-08-04 Python?編程操作連載之字符串,列表,字典和集合處理_python
- 2023-07-30 ES6 module語法中export和import的使用
- 2022-01-17 git git版本回退 回滾 解決方案
- 2022-09-29 關于numpy兩個array疊加操作詳解_python
- 2022-11-05 Nginx配置文件中location配置的多種場景_nginx
- 2022-05-11 pg分區表的實踐
- 2022-10-27 詳解Python中enumerate函數的使用_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支