最新国产好看的视频,伊人天堂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()   檢測(cè)某類型事件是否在隊(duì)列中
pygame.event.clear() 從隊(duì)列中清除所有的事件
pygame.event.get_blocked()  檢測(cè)某一類型的事件是否被禁止進(jìn)入隊(duì)列
pygame.event.post()   放置一個(gè)新的事件到隊(duì)列中
pygame.event.Event()   創(chuàng)建一個(gè)用戶自定義的新事件

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

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)用上述方法對(duì)鼠標(biāo)事件和鍵盤事件分別做簡(jiǎn)單的介紹。

處理鍵盤事件

鍵盤事件會(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鍵

想要了解更多按鍵常量可參考官方文檔,這里有您想要的更多知識(shí) ———> 點(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語(yǔ)言中文網(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 屬性對(duì)應(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),不同事件類型對(duì)應(yīng)著不同的成員屬性。如下所示:

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

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

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

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

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

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

通過一組簡(jiǎn)單的示例對(duì)鼠標(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

    這篇文章主要介紹了python爬蟲之教你如何爬取地理數(shù)據(jù),文中有非常詳細(xì)的代碼示例,對(duì)正在學(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等工具都需要注冊(cè)了,這里用免費(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ì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • django聯(lián)系人登錄界面案例詳解

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

    在本案例中,將介紹如何使用Django框架創(chuàng)建一個(gè)簡(jiǎn)單的聯(lián)系人登錄界面,案例涉及前端HTML頁(yè)面設(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對(duì)象、綁定地址、監(jiān)聽連接、接受連接、發(fā)送和接收數(shù)據(jù)以及關(guān)閉連接等,TCP和UDP是常用的網(wǎng)絡(luò)協(xié)議,IP地址和端口號(hào)用于標(biāo)識(shí)通信端點(diǎn),通過這些功能,可以實(shí)現(xiàn)客戶端和服務(wù)器之間的網(wǎng)絡(luò)通信
    2025-01-01
  • python機(jī)器學(xué)習(xí)庫(kù)xgboost的使用

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

    這篇文章主要介紹了python機(jī)器學(xué)習(xí)庫(kù)xgboost的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(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à)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07

最新評(píng)論

南昌市| 武汉市| 喜德县| 体育| 卢氏县| 剑河县| 枣强县| 鄂尔多斯市| 梅河口市| 永顺县| 绵阳市| 自治县| 东乌珠穆沁旗| 玛纳斯县| 三都| 奇台县| 峨边| 安岳县| 双柏县| 大悟县| 微山县| 全椒县| 襄城县| 司法| 木里| 吴川市| 仙游县| 衢州市| 前郭尔| 祁阳县| 罗城| 华蓥市| 沾益县| 孝昌县| 安乡县| 玉屏| 襄樊市| 景泰县| 萨迦县| 北安市| 宁明县|