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

Python之Pygame的Event事件模塊

 更新時(shí)間:2023年04月03日 15:19:03   作者:deepboat  
這篇文章主要介紹了Pygame的Event事件模塊,事件(Event)是 Pygame 的重要模塊之一,它是構(gòu)建整個(gè)游戲程序的核心,Pygame 定義了一個(gè)專門用來處理事件的結(jié)構(gòu),即事件隊(duì)列,本文有一定參考價(jià)值,感興趣的同學(xué)可以閱讀參考

Pygame的Event事件模塊

事件(Event)是 Pygame 的重要模塊之一,它是構(gòu)建整個(gè)游戲程序的核心,比如常用的鼠標(biāo)點(diǎn)擊、鍵盤敲擊、游戲窗口移動(dòng)、調(diào)整窗口大小、觸發(fā)特定的情節(jié)、退出游戲等,這些都可以看做是“事件”。

 事件類型

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

名稱說明
QUIT用戶按下窗口的關(guān)閉按鈕
ATIVEEVENTPygame被激活或者隱藏
KEYDOWN鍵盤按下
KEYUP鍵盤放開
MOUSEMOTION鼠標(biāo)移動(dòng)
MOUSEBUTTONDOWN鼠標(biāo)按下
MOUSEBUTTONUP鼠標(biāo)放開
JOYAXISMOTION游戲手柄(Joystick or pad) 移動(dòng)
JOYBALLMOTION 游戲球(Joy ball) 移動(dòng)
JOYHATMOTION游戲手柄(Joystick) 移動(dòng)
JOYBUTTONDOWN游戲手柄按下
JOYBUTTONUP游戲手柄放開
VIDEORESIZEPygame窗口縮放
VIDEOEXPOSEPygame窗口部分公開(expose)
USEREVENT觸發(fā)一個(gè)用戶事件

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

事件處理方法

名稱說明
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 語句。如下所示:

import pygame

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('鍵盤彈起')

 處理鍵盤事件

鍵盤事件提供了一個(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_90…9
K_a...Kza…z
K_DELETE刪除鍵(delete)
K_KP0...K_KP90(小鍵盤)…9(小鍵盤)
K_F1...K_F15F1…F15
K_UP向上箭頭(up arrow)
K_DOWN向下箭頭(down arrow)
K_RIGHT向右箭頭(right arrow)
K_LEFT向左箭頭(left arrow)
KMOD_ALT同時(shí)按下Alt鍵

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

import pygame
import sys

# 初始化pygame
pygame.init()
# 定義變量
size = width, height = 600, 400
bg = (255, 255, 255)
# 加載logo圖
img = pygame.image.load("./python.png")
# 獲取圖像的位置
position = img.get_rect()
# 創(chuàng)建一個(gè)主窗口
screen = pygame.display.set_mode(size)
# 標(biāo)題
pygame.display.set_caption("Python自學(xué)網(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()

處理鼠標(biāo)事件

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

import pygame
from random import randint

# 初始化程序
pygame.init()
screen = pygame.display.set_mode((450, 400))
pygame.display.set_caption("Python自學(xué)網(wǎng)")
# 更新顯示
pygame.display.flip()
while True:
    # 等待事件發(fā)生
    event = pygame.event.wait()
    if event.type == pygame.QUIT:
        exit("成功退出")
    if event.type == pygame.MOUSEBUTTONDOWN:
        # pos 獲取鼠標(biāo)當(dāng)前位置
        print('鼠標(biāo)按下', event.pos)
        mx, my = event.pos
        # 調(diào)用 pygame.draw 模塊畫圓
        pygame.draw.circle(screen, (255, 255, 0), (mx, my), 50)
        # 處理完,更新顯示
        pygame.display.update()
    if event.type == pygame.MOUSEBUTTONUP:
        print('鼠標(biāo)彈起')
        pass
    if event.type == pygame.MOUSEMOTION:
        print('鼠標(biāo)移動(dòng)')
        mx, my = event.pos
        # 隨機(jī)生成 RGB 顏色值
        r = randint(0, 255)
        g = randint(0, 255)
        b = randint(0, 255)
        pygame.draw.circle(screen, (r, g, b,), (mx, my), 50)
        # 處理完,更新顯示
        pygame.display.update()

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

相關(guān)文章

  • MAC平臺(tái)基于Python Appium環(huán)境搭建過程圖解

    MAC平臺(tái)基于Python Appium環(huán)境搭建過程圖解

    這篇文章主要介紹了MAC平臺(tái)基于Python Appium環(huán)境搭建過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Python腳本實(shí)現(xiàn)小猿口算

    Python腳本實(shí)現(xiàn)小猿口算

    最近小猿口算已經(jīng)被不少大學(xué)生攻占,一個(gè)好好的給小學(xué)生的口算題已經(jīng)變成了大學(xué)生的計(jì)算機(jī)大戰(zhàn),下面我們就來看看如何使用Python腳本就行吧小猿口算
    2024-10-10
  • Python之Pygame的Event事件模塊

    Python之Pygame的Event事件模塊

    這篇文章主要介紹了Pygame的Event事件模塊,事件(Event)是 Pygame 的重要模塊之一,它是構(gòu)建整個(gè)游戲程序的核心,Pygame 定義了一個(gè)專門用來處理事件的結(jié)構(gòu),即事件隊(duì)列,本文有一定參考價(jià)值,感興趣的同學(xué)可以閱讀參考
    2023-04-04
  • 深入淺析Pytorch中stack()方法

    深入淺析Pytorch中stack()方法

    這篇文章主要介紹了Pytorch中stack()方法的總結(jié)及理解,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • 淺析python的優(yōu)勢和不足之處

    淺析python的優(yōu)勢和不足之處

    在本篇內(nèi)容中小編給大家整理了關(guān)于分析python的優(yōu)勢和不足的分析,有需要的朋友們參考下。
    2018-11-11
  • python爬蟲基礎(chǔ)教程:requests庫(二)代碼實(shí)例

    python爬蟲基礎(chǔ)教程:requests庫(二)代碼實(shí)例

    這篇文章主要介紹了python爬蟲基礎(chǔ)教程:requests庫(二),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • python實(shí)現(xiàn)猜拳游戲

    python實(shí)現(xiàn)猜拳游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)猜拳游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Python從零開始訓(xùn)練AI模型的實(shí)用教程

    Python從零開始訓(xùn)練AI模型的實(shí)用教程

    本文介紹了如何使用Python從零開始訓(xùn)練自己的AI模型,包括確定問題和數(shù)據(jù)集、數(shù)據(jù)預(yù)處理、構(gòu)建模型、訓(xùn)練模型、評估和調(diào)優(yōu)模型以及部署和應(yīng)用模型等步驟
    2025-02-02
  • Python標(biāo)準(zhǔn)庫os常用函數(shù)和屬性詳解

    Python標(biāo)準(zhǔn)庫os常用函數(shù)和屬性詳解

    os模塊是Python標(biāo)準(zhǔn)庫中的一個(gè)用于訪問操作系統(tǒng)相關(guān)功能的模塊,os模塊提供了一種可移植的使用操作系統(tǒng)功能的方法,本文給大家介紹下?OS標(biāo)準(zhǔn)庫常用函數(shù)和屬性,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • Python字符串的全排列算法實(shí)例詳解

    Python字符串的全排列算法實(shí)例詳解

    這篇文章主要介紹了Python字符串的全排列算法,結(jié)合實(shí)例形式較為詳細(xì)的總結(jié)分析了Python字符串全排列的常見操作技巧,需要的朋友可以參考下
    2019-01-01

最新評論

浮梁县| 龙泉市| 略阳县| 海门市| 旺苍县| 瑞丽市| 平定县| 阳朔县| 凭祥市| 曲水县| 白朗县| 泊头市| 东城区| 称多县| 海晏县| 罗甸县| 砚山县| 泸西县| 汉寿县| 金乡县| 万年县| 攀枝花市| 潜江市| 寿光市| 温州市| 买车| 本溪| 莱西市| 兰西县| 英超| 潜江市| 基隆市| 辽源市| 白河县| 凌海市| 甘孜县| 阿坝| 民权县| 青铜峡市| 逊克县| 合川市|