Python之Pygame的Event事件模組怎麼使用

WBOY
發布: 2023-05-18 11:58:25
轉載
2953 人瀏覽過

Pygame的Event事件模組

事件(Event)是Pygame 的重要模組之一,它是建立整個遊戲程式的核心,例如常用的滑鼠點擊、鍵盤敲擊、遊戲視窗移動、調整視窗大小、觸發特定的情節、退出遊戲等,這些都可以看做是「事件」。

 事件類型

Pygame 定義了一個專門用來處理事件的結構,即事件佇列,該結構遵循遵循佇列「先到先處理」的基本原則,透過事件佇列,我們可以有順序的、逐一的處理使用者的操作(觸發事件)。下述表格列出了Pygame 中常用的遊戲事件:

##說明##QUIT#ATIVEEVENTKEYDOWNKEYUPMOUSEMOTIONMOUSEBUTTONDOWN#MOUSEBUTTONUP#JOYAXISMOTION##JOYBALLMOTION JOYHATMOTION#JOYBUTTONDOWNJOYBUTTONUPVIDEORESIZEVIDEOEXPOSEUSEREVENT注意,當使用Pygame 做遊戲開發時,上述事件並非都會應用的到,因此在學習的過程中,我們要懂得觸類旁通、舉一反三。
#名稱
使用者按下視窗的關閉按鈕
Pygame被啟動或隱藏
#鍵盤按下
鍵盤放開
滑鼠移動
滑鼠按下
##滑鼠放開
遊戲手把(Joystick or pad) 移動
#遊戲球(Joy ball) 移動
遊戲手把(Joystick) 移動
遊戲手把按下
遊戲手把放開
Pygame視窗縮放
# Pygame視窗部分公開(expose)
觸發一個使用者事件
事件處理方法

名稱#說明pygame.event.get()阻塞直到事件發生才會繼續執行,若沒有事件發生將一直處於阻塞狀態控制哪些事件禁止進入佇列,如果參數值為None,表示禁止所有事件進入控制哪些事件允許進入佇列呼叫此方法後,Pygame 會自動處理事件佇列會根據實際情形傳回一個真實的事件,或是一個None偵測某類型事件是否在佇列中#從佇列中清除所有的事件偵測某一類型的事件是否被禁止進入佇列放置一個新的事件到佇列中建立一個使用者自訂的新事件

當我們使用 Pygame 處理事件時,邏輯一般都是相似的。需要先確定事件的類型,然後針對每種事件類型採取不同的遊戲操作。因此,if & else 語句非常適用於這種情況。如下所示:

import pygame

while True:
    # 等待事件发生
    event = pygame.event.wait()
    if event.type == pygame.QUIT:
        exit()
    if event.type == pygame.MOUSEBUTTONDOWN:
        print('鼠标按下', event.pos)
    if event.type == pygame.MOUSEBUTTONUP:
        print('鼠标弹起')
    if event.type == pygame.MOUSEMOTION:
        print('鼠标移动')
        # 键盘事件
    if event.type == pygame.KEYDOWN:
        # 打印按键的英文字符
        print('键盘按下', chr(event.key))
    if event.type == pygame.KEYUP:
        print('键盘弹起')
登入後複製

 處理鍵盤事件

我們可以使用鍵盤事件提供的 key 屬性來取得按下的鍵盤按鍵。 Pygame 將鍵盤上的字母鍵、數字鍵、組合鍵等按鍵以常數的方式進行了定義,下表列出了部分常用按鍵的常數:

從事件佇列中取得事件,並從佇列中刪除該事件 ##pygame.event.wait() 
pygame.event.set_blocked() 
pygame.event.set_allowed()  
pygame.event.pump() 
pygame.event.poll() 
pygame.event.peek()  
pygame.event.clear()
pygame.event.get_blocked() 
pygame.event.post()
#pygame.event.Event()  
##名稱說明#K_BACKSPACEK_TABK_CLEAR清除鍵(Clear)#Enter鍵(Enter)##退出鍵(Escape)空白鍵(Space)0…9a…z刪除鍵(delete)
K_BACKSPACE
製表鍵(Tab)
K_RETURN
# #K_PAUSE暫停鍵(Pause)
#K_ESCAPE
K_SPACE
K_0...K_9
K_a...Kz
K_DELETE
#K_KP0...K_KP9

#0 (小鍵盤)…9(小鍵盤)

K_F1...K_F15


F1…F15

#K_UP

向上箭頭(up arrow)


K_DOWN#########################K_DOWN###################向下箭頭(down arrow)###############K_RIGHT##########向右箭頭(right arrow)############ ###K_LEFT#########向左箭頭(left arrow)################KMOD_ALT#########同時按下Alt鍵###############下面透過「圖片移動」範例來了解鍵盤事件的處理過程,如下所示:###
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()
# 创建一个主窗口
screen = pygame.display.set_mode(size)
# 标题
pygame.display.set_caption("Python自学网")
# 创建游戏主循环
while True:
    # 设置初始值
    site = [0, 0]
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        # 图像移动 KEYDOWN 键盘按下事件
        # 通过 key 属性对应按键
        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
    # 移动图像
    position = position.move(site)
    # 填充背景
    screen.fill(bg)
    # 放置图片
    screen.blit(img, position)
    # 更新显示界面
    pygame.display.flip()
登入後複製
###處理滑鼠事件###### ###Pygame 提供了三個滑鼠事件,分別是滑鼠移動(MOUSEMOTION)、滑鼠按下(MOUSEBUTTONDOWN)、滑鼠釋放(MOUSEBUTTONUP),不同事件類型對應著不同的成員屬性。如下圖:######pygame.event.MOUSEMOTION滑鼠移動事件######    event.pos 相對於視窗左上角,滑鼠的目前座標值(x,y)###    event.rel 滑鼠相對運動距離(X,Y),相對於上次事件###    event.buttons 滑鼠按鈕初始狀態(0,0,0),分別對應(左鍵,滑輪,右鍵),移動過程中點選那個鍵,對應位置變會為1######pygame.event.MOUSEBUTTONUP滑鼠鍵釋放事件######    event.pos 相對於視窗左上角,滑鼠的目前座標值(x,y)###    event .button 滑鼠釋放鍵編號(整數)左鍵為1,按下滾動輪2、右鍵為3######pygame.event.MOUSEBUTTONDOWN 滑鼠鍵按下事件######    event.pos 相對於視窗左上角,滑鼠的目前座標值(x,y)###    event.button 滑鼠按下鍵編號(整數),左鍵為1,按下滾動輪2、右鍵為3,向前滾動滑輪4、向後滾動滑輪5######
import pygame
from random import randint

# 初始化程序
pygame.init()
screen = pygame.display.set_mode((450, 400))
pygame.display.set_caption("Python自学网")
# 更新显示
pygame.display.flip()
while True:
    # 等待事件发生
    event = pygame.event.wait()
    if event.type == pygame.QUIT:
        exit("成功退出")
    if event.type == pygame.MOUSEBUTTONDOWN:
        # pos 获取鼠标当前位置
        print('鼠标按下', event.pos)
        mx, my = event.pos
        # 调用 pygame.draw 模块画圆
        pygame.draw.circle(screen, (255, 255, 0), (mx, my), 50)
        # 处理完,更新显示
        pygame.display.update()
    if event.type == pygame.MOUSEBUTTONUP:
        print('鼠标弹起')
        pass
    if event.type == pygame.MOUSEMOTION:
        print('鼠标移动')
        mx, my = event.pos
        # 随机生成 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()
登入後複製

以上是Python之Pygame的Event事件模組怎麼使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!