網(wǎng)站首頁 編程語言 正文
Python?pygame?項(xiàng)目實(shí)戰(zhàn)事件監(jiān)聽_python
作者:ZacheryZHANG??????? ? 更新時(shí)間: 2022-10-09 編程語言1. 在游戲循環(huán)中監(jiān)聽事件
事件event:
- 就是游戲啟動(dòng)后,用戶針對游戲所做的操作
- 例如:點(diǎn)擊關(guān)閉按鈕,點(diǎn)擊鼠標(biāo),按下鍵盤
監(jiān)聽:
- 在游戲循環(huán)中,判斷用戶具體操作
- 只有捕獲到用戶具體的操作,才能有針對性的做出響應(yīng)
- 簡而言之,在游戲循環(huán)中編寫一小段代碼,通過這一小段代碼,判斷用戶的具體操作行為,這個(gè)就叫做監(jiān)聽
代碼實(shí)現(xiàn):
- pygame中通過
pygame.event.get()
可以獲得用戶當(dāng)前所做動(dòng)作的事件列表
(因?yàn)橥粫r(shí)間用戶所作的操作可能會(huì)有很多件) - 用戶可以同一時(shí)間做很多事情
- 提示:這段代碼非常的固定,幾乎所有的pygame游戲都大同小異!
2. 案例演示
2.1 案例概覽
本節(jié),我們將在上一小節(jié)的基礎(chǔ)上(詳情請見本專欄上一篇文章),完成捕獲用戶所做的動(dòng)作事件列表。
以下代碼中,使用了pygame.event.get()
方法,get
方法返回的類型為列表類型,因此,我們使用event_list
變量來接收get方法返回的結(jié)果。但是,如果僅僅是這樣改造代碼,運(yùn)行時(shí)在程序控制臺輸出了很多空的列表。因此,我們可以考慮增加if
判斷,判斷是否用戶進(jìn)行了操作事件(是否有操作事件發(fā)生)。此時(shí),再運(yùn)行程序,就可以輸出很多操作細(xì)節(jié)了。(可以移動(dòng)鼠標(biāo)或者按下鍵盤試試),控制臺會(huì)輸出捕獲的用戶操作。
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í)鐘對象 clock = pygame.time.Clock() # 游戲循環(huán)->意味著游戲的正式開始 # 1. 定義rect記錄飛機(jī)的初始位置 hero_rect = pygame.Rect(280, 500, 102, 126) # 游戲循環(huán)->意味著游戲的正式開始 while True: # 希望無限循環(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é)果如下所示:
原文鏈接:https://juejin.cn/post/7131375568104194055
相關(guān)推薦
- 2022-04-16 Redis命令處理過程源碼解析_Redis
- 2023-01-28 Flutter框架解決盒約束widget和assets里加載資產(chǎn)技術(shù)_Android
- 2022-05-28 Redis如何使用樂觀鎖(CAS)保證數(shù)據(jù)一致性_Redis
- 2022-03-29 jquery實(shí)現(xiàn)頁面彈球效果_jquery
- 2023-04-19 SQLSERVER?的?truncate?和?delete?區(qū)別解析_MsSql
- 2023-07-15 es6中export和export default的區(qū)別
- 2022-09-23 Python線程threading(Thread類)_python
- 2022-08-27 C++?Thread實(shí)現(xiàn)簡單的socket多線程通信_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支