網站首頁 編程語言 正文
1. 在游戲循環中監聽事件
事件event:
- 就是游戲啟動后,用戶針對游戲所做的操作
- 例如:點擊關閉按鈕,點擊鼠標,按下鍵盤
監聽:
- 在游戲循環中,判斷用戶具體操作
- 只有捕獲到用戶具體的操作,才能有針對性的做出響應
- 簡而言之,在游戲循環中編寫一小段代碼,通過這一小段代碼,判斷用戶的具體操作行為,這個就叫做監聽
代碼實現:
- pygame中通過
pygame.event.get()
可以獲得用戶當前所做動作的事件列表
(因為同一時間用戶所作的操作可能會有很多件) - 用戶可以同一時間做很多事情
- 提示:這段代碼非常的固定,幾乎所有的pygame游戲都大同小異!
2. 案例演示
2.1 案例概覽
本節,我們將在上一小節的基礎上(詳情請見本專欄上一篇文章),完成捕獲用戶所做的動作事件列表。
以下代碼中,使用了pygame.event.get()
方法,get
方法返回的類型為列表類型,因此,我們使用event_list
變量來接收get方法返回的結果。但是,如果僅僅是這樣改造代碼,運行時在程序控制臺輸出了很多空的列表。因此,我們可以考慮增加if
判斷,判斷是否用戶進行了操作事件(是否有操作事件發生)。此時,再運行程序,就可以輸出很多操作細節了。(可以移動鼠標或者按下鍵盤試試),控制臺會輸出捕獲的用戶操作。
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) # 捕獲事件 event_list = pygame.event.get() if len(event_list) > 0: print(event_list) # 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.2 運行結果
運行結果如下所示:
原文鏈接:https://juejin.cn/post/7131375568104194055
相關推薦
- 2023-07-26 TypeScript中的模塊與命名空間
- 2022-08-01 Python+Selenium鍵盤鼠標模擬事件操作詳解_python
- 2022-11-18 詳解C語言內核字符串拷貝與比較_C 語言
- 2022-08-05 Redis實現短信驗證碼登錄的示例代碼_Redis
- 2022-04-10 Blazor框架簡介_基礎應用
- 2022-12-08 C#與C++?dll之間傳遞字符串string?wchar_t*?char*?IntPtr問題_C#
- 2022-06-12 Android開發之保存圖片到相冊的三種方法詳解_Android
- 2022-07-15 Golang配置解析神器go?viper使用詳解_Golang
- 最近更新
-
- 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同步修改后的遠程分支