最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pygame Event事件模塊的詳細(xì)示例

 更新時(shí)間:2021年11月17日 11:37:04   投稿:zx  
事件是Pygame的重要模塊之一,比如鼠標(biāo)點(diǎn)擊、鍵盤敲擊、游戲窗口移動(dòng)、調(diào)整窗口大小、觸發(fā)特定的情節(jié)、退出游戲等等,本文就詳細(xì)的介紹一下具體用法,感興趣的可以了解一下

事件(Event)是 Pygame 的重要模塊之一,它是構(gòu)建整個(gè)游戲程序的核心,比如鼠標(biāo)點(diǎn)擊、鍵盤敲擊、游戲窗口移動(dòng)、調(diào)整窗口大小、觸發(fā)特定的情節(jié)、退出游戲等等,這些都可以看做是“事件”,Pygame 會(huì)接受用戶產(chǎn)生的各種操作(或事件),這些操作隨時(shí)產(chǎn)生,并且操作量可大可小,那么 Pygame 是如何處理這些事件的呢?

事件類型

Pygame 定義了一個(gè)專門用來處理事件的結(jié)構(gòu),即事件隊(duì)列,該結(jié)構(gòu)遵循遵循隊(duì)列“先到先處理”的基本原則,通過事件隊(duì)列,我們可以有序的、逐一的處理用戶的操作(觸發(fā)事件)。下述表格列出了 Pygame 中常用的游戲事件:

事件類型 描述 成員屬性
QUIT 用戶按下窗口的關(guān)閉按鈕 none
ATIVEEVENT Pygame被激活或者隱藏 gain,state
KEYDOWN 鍵盤按下 unicode、key、mod
KEYUP 鍵盤放開 key、mod
MOUSEMOTION 鼠標(biāo)移動(dòng)   pos, rel, buttons
MOUSEBUTTONDOWN 鼠標(biāo)按下  pos, button
MOUSEBUTTONUP 鼠標(biāo)放開  pos, button
JOYAXISMOTION 游戲手柄(Joystick or pad) 移動(dòng)  joy, axis, value
JOYBALLMOTION  游戲球(Joy ball) 移動(dòng)   joy, axis, value
JOYHATMOTION 游戲手柄(Joystick) 移動(dòng)     joy, axis, value
JOYBUTTONDOWN 游戲手柄按下 joy, button
JOYBUTTONUP 游戲手柄放開     joy, button
VIDEORESIZE Pygame窗口縮放   size, w, h
VIDEOEXPOSE Pygame窗口部分公開(expose)  none
USEREVENT 觸發(fā)一個(gè)用戶事件   事件代碼

注意,當(dāng)使用 Pygame 做游戲開發(fā)時(shí),上述事件并非都會(huì)應(yīng)用的到,因此在學(xué)習(xí)的過程中,我們要懂得觸類旁通、舉一反三。

事件處理方法

Pygame.event 模塊提供了處理事件隊(duì)列的常用方法,如下表所示:

方法 說明
pygame.event.get() 從事件隊(duì)列中獲取一個(gè)事件,并從隊(duì)列中刪除該事件
pygame.event.wait()  阻塞直至事件發(fā)生才會(huì)繼續(xù)執(zhí)行,若沒有事件發(fā)生將一直處于阻塞狀態(tài)
pygame.event.set_blocked()  控制哪些事件禁止進(jìn)入隊(duì)列,如果參數(shù)值為None,則表示禁止所有事件進(jìn)入
pygame.event.set_allowed()   控制哪些事件允許進(jìn)入隊(duì)列
pygame.event.pump()  調(diào)用該方法后,Pygame 會(huì)自動(dòng)處理事件隊(duì)列
pygame.event.poll()  會(huì)根據(jù)實(shí)際情形返回一個(gè)真實(shí)的事件,或者一個(gè)None
pygame.event.peek()   檢測某類型事件是否在隊(duì)列中
pygame.event.clear() 從隊(duì)列中清除所有的事件
pygame.event.get_blocked()  檢測某一類型的事件是否被禁止進(jìn)入隊(duì)列
pygame.event.post()   放置一個(gè)新的事件到隊(duì)列中
pygame.event.Event()   創(chuàng)建一個(gè)用戶自定義的新事件

當(dāng)我們使用 Pygame 處理事件時(shí),邏輯一般都是相似的。首先是判斷事件的類型,然后根據(jù)不同的事件操作,執(zhí)行不同的游戲操作。因此這種情況非常適合使用 if ... else 語句。如下所示:

while True:
    #等待事件發(fā)生
    event = pygame.event.wait()
    if event.type == pygame.QUIT:
        exit()
    if event.type == pygame.MOUSEBUTTONDOWN:
        print('鼠標(biāo)按下',event.pos)
    if event.type == pygame.MOUSEBUTTONUP:
        print('鼠標(biāo)彈起')
    if event.type == pygame.MOUSEMOTION:
        print('鼠標(biāo)移動(dòng)')
        # 鍵盤事件
    if event.type ==pygame.KEYDOWN:
        # 打印按鍵的英文字符
        print('鍵盤按下',chr(event.key))
    if event.type == pygame.KEYUP:
        print('鍵盤彈起')
    ....

下面應(yīng)用上述方法對鼠標(biāo)事件和鍵盤事件分別做簡單的介紹。

處理鍵盤事件

鍵盤事件會(huì)涉及到大量的按鍵操作,比如游戲中的上下左右,或者人物的前進(jìn)、后退等操作,這些都需要鍵盤來配合實(shí)現(xiàn)。

鍵盤事件提供了一個(gè) key 屬性,通過該屬性可以獲取鍵盤的按鍵。Pygame 將鍵盤上的字母鍵、數(shù)字鍵、組合鍵等按鍵以常量的方式進(jìn)行了定義,下表列出了部分常用按鍵的常量:

常量名 描述
K_BACKSPACE 退格鍵(Backspace)
K_TAB 制表鍵(Tab)
K_CLEAR 清除鍵(Clear)
K_RETURN 回車鍵(Enter)
K_PAUSE 暫停鍵(Pause)
K_ESCAPE 退出鍵(Escape)
K_SPACE 空格鍵(Space)
K_0...K_9 0...9
K_a...Kz a...z
K_DELETE 刪除鍵(delete)
K_KP0...K_KP9 0(小鍵盤)...9(小鍵盤)
K_F1...K_F15 F1...F15
K_UP 向上箭頭(up arrow)
K_DOWN 向下箭頭(down arrow)
K_RIGHT 向右箭頭(right arrow)
K_LEFT 向左箭頭(left arrow)
KMOD_ALT 同時(shí)按下Alt鍵

想要了解更多按鍵常量可參考官方文檔,這里有您想要的更多知識 ———> 點(diǎn)擊前往

下面通過“圖片移動(dòng)”示例來了解鍵盤事件的處理過程,如下所示:

import pygame
import sys
# 初始化pygame
pygame.init()
# 定義變量
size = width, height = 600, 400
bg = (255, 255, 255)
# 加載logo圖
img = pygame.image.load("C:/Users/Administrator/Desktop/logo.jpg")
# 獲取圖像的位置
position = img.get_rect()
# 創(chuàng)建一個(gè)主窗口
screen = pygame.display.set_mode(size)
# 標(biāo)題
pygame.display.set_caption("C語言中文網(wǎng)")
# 創(chuàng)建游戲主循環(huán)
while True:
    # 設(shè)置初始值
    site = [0, 0]
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        # 圖像移動(dòng) KEYDOWN 鍵盤按下事件
        # 通過 key 屬性對應(yīng)按鍵
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                site[1] -= 8
            if event.key == pygame.K_DOWN:
                site[1] += 8
            if event.key == pygame.K_LEFT:
                site[0] -= 8
            if event.key == pygame.K_RIGHT:
                site[0] += 8
    # 移動(dòng)圖像
    position = position.move(site)
    # 填充背景
    screen.fill(bg)
    # 放置圖片
    screen.blit(img, position)
    # 更新顯示界面
    pygame.display.flip()

程序運(yùn)行結(jié)果如下:

圖1:Pygame鍵盤事件——圖像移動(dòng)

處理鼠標(biāo)事件

鼠標(biāo)是計(jì)算機(jī)最重要外接設(shè)備之一,同時(shí)它也是游戲玩家必不可少的工具之一。

Pygame 提供了三個(gè)鼠標(biāo)事件,分別是鼠標(biāo)移動(dòng)(MOUSEMOTION)、鼠標(biāo)按下(MOUSEBUTTONDOWN)、鼠標(biāo)釋放(MOUSEBUTTONUP),不同事件類型對應(yīng)著不同的成員屬性。如下所示:

pygame.event.MOUSEMOTION鼠標(biāo)移動(dòng)事件

    event.pos 相對于窗口左上角,鼠標(biāo)的當(dāng)前坐標(biāo)值(x,y)
    event.rel 鼠標(biāo)相對運(yùn)動(dòng)距離(X,Y),相對于上次事件
    event.buttons 鼠標(biāo)按鈕初始狀態(tài)(0,0,0),分別對應(yīng)(左鍵,滑輪,右鍵),移動(dòng)過程中點(diǎn)擊那個(gè)鍵,相應(yīng)位置變會(huì)為1

pygame.event.MOUSEBUTTONUP鼠標(biāo)鍵釋放事件

    event.pos 相對于窗口左上角,鼠標(biāo)的當(dāng)前坐標(biāo)值(x,y)
    event.button 鼠標(biāo)釋放鍵編號(整數(shù))左鍵為1,按下滾動(dòng)輪2、右鍵為3

pygame.event.MOUSEBUTTONDOWN 鼠標(biāo)鍵按下事件

    event.pos 相對于窗口左上角,鼠標(biāo)的當(dāng)前坐標(biāo)值(x,y)
    event.button 鼠標(biāo)按下鍵編號(整數(shù)),左鍵為1,按下滾動(dòng)輪2、右鍵為3,向前滾動(dòng)滑輪4、向后滾動(dòng)滑輪5

通過一組簡單的示例對鼠標(biāo)事件進(jìn)行演示,示例代碼如下:

程序運(yùn)行結(jié)果如下:

圖2:Pygame鼠標(biāo)事件——鼠標(biāo)移動(dòng)

到此這篇關(guān)于Pygame Event事件模塊的詳細(xì)示例的文章就介紹到這了,更多相關(guān)Pygame Event內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python爬蟲之教你如何爬取地理數(shù)據(jù)

    python爬蟲之教你如何爬取地理數(shù)據(jù)

    這篇文章主要介紹了python爬蟲之教你如何爬取地理數(shù)據(jù),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • Python Playwright 文本框操作技巧

    Python Playwright 文本框操作技巧

    這篇文章主要介紹了Python Playwright 文本框操作技巧,包括如何獲得文本框的值,以及向文本框中添加單行和多行文本,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • python實(shí)現(xiàn)拉格朗日插值及作圖

    python實(shí)現(xiàn)拉格朗日插值及作圖

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)拉格朗日插值及作圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Python?代替?xftp?從?Linux?服務(wù)器下載文件的操作方法

    Python?代替?xftp?從?Linux?服務(wù)器下載文件的操作方法

    我們經(jīng)常需要從Linux服務(wù)器上同步文件,但是xftp等工具都需要注冊了,這里用免費(fèi)的Python代碼來下載文件,還可以擴(kuò)展更多的自定義用法,這篇文章主要介紹了Python?代替?xftp?從?Linux?服務(wù)器下載文件,需要的朋友可以參考下
    2024-06-06
  • 你還在@微信官方?聊聊Python生成你想要的微信頭像

    你還在@微信官方?聊聊Python生成你想要的微信頭像

    這篇文章主要介紹了你還在@微信官方?我來教你用Python生成你想要的微信頭像功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python Tornado核心及相關(guān)原理詳解

    Python Tornado核心及相關(guān)原理詳解

    這篇文章主要介紹了Python Tornado核心及相關(guān)原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • django聯(lián)系人登錄界面案例詳解

    django聯(lián)系人登錄界面案例詳解

    在本案例中,將介紹如何使用Django框架創(chuàng)建一個(gè)簡單的聯(lián)系人登錄界面,案例涉及前端HTML頁面設(shè)計(jì),CSS和JS的應(yīng)用,以及后端views.py的編寫,在后端處理中,密碼將通過MD5進(jìn)行加密,保證安全性,本文給大家介紹了django聯(lián)系人登錄界面案例詳解,感興趣的朋友一起看看吧
    2024-10-10
  • python網(wǎng)絡(luò)編程tcp客戶端及服務(wù)端解讀

    python網(wǎng)絡(luò)編程tcp客戶端及服務(wù)端解讀

    Python的socket模塊提供了基本的網(wǎng)絡(luò)通信功能,包括創(chuàng)建socket對象、綁定地址、監(jiān)聽連接、接受連接、發(fā)送和接收數(shù)據(jù)以及關(guān)閉連接等,TCP和UDP是常用的網(wǎng)絡(luò)協(xié)議,IP地址和端口號用于標(biāo)識通信端點(diǎn),通過這些功能,可以實(shí)現(xiàn)客戶端和服務(wù)器之間的網(wǎng)絡(luò)通信
    2025-01-01
  • python機(jī)器學(xué)習(xí)庫xgboost的使用

    python機(jī)器學(xué)習(xí)庫xgboost的使用

    這篇文章主要介紹了python機(jī)器學(xué)習(xí)庫xgboost的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • keras的三種模型實(shí)現(xiàn)與區(qū)別說明

    keras的三種模型實(shí)現(xiàn)與區(qū)別說明

    這篇文章主要介紹了keras的三種模型實(shí)現(xiàn)與區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07

最新評論

武宁县| 宁强县| 长垣县| 光泽县| 惠东县| 六安市| 焦作市| 南和县| 峨眉山市| 滦平县| 贵港市| 依安县| 九寨沟县| 芦山县| 德昌县| 沙田区| 朝阳县| 登封市| 龙南县| 万载县| 青神县| 镇巴县| 尚志市| 宁陕县| 莱阳市| 罗山县| 二连浩特市| 桂东县| 惠来县| 齐河县| 洞口县| 右玉县| 新田县| 易门县| 东平县| 遂昌县| 万山特区| 西平县| 宁南县| 金湖县| 北流市|