Maison  >  Article  >  développement back-end  >  Comment utiliser le module d'événement Event de Pygame en Python

Comment utiliser le module d'événement Event de Pygame en Python

WBOY
WBOYavant
2023-05-18 11:58:252948parcourir

Module Événement de Pygame

Événement (Événement) est l'un des modules importants de Pygame. Il est au cœur de la construction de l'ensemble du programme de jeu, comme les clics de souris couramment utilisés, les frappes sur le clavier, le mouvement de la fenêtre de jeu, le redimensionnement de la fenêtre et le déclenchement spécifique. événements. L'intrigue, la sortie du jeu, etc., peuvent être considérés comme des « événements ».

Type d'événement

Pygame définit une structure spécifiquement utilisée pour traiter les événements, à savoir la file d'attente des événements. Cette structure suit le principe de base du "premier arrivé, premier traité" de la file d'attente, nous pouvons la traiter un par. une de manière ordonnée. Action de l’utilisateur (événement déclencheur). Le tableau suivant répertorie les événements de jeu couramment utilisés dans Pygame :

Nom Description
QUITTERQUIT 用户按下窗口的关闭按钮
ATIVEEVENT Pygame被激活或者隐藏
KEYDOWN 键盘按下
KEYUP 键盘放开
MOUSEMOTION 鼠标移动
MOUSEBUTTONDOWN 鼠标按下
MOUSEBUTTONUP 鼠标放开
JOYAXISMOTION 游戏手柄(Joystick or pad) 移动
JOYBALLMOTION  游戏球(Joy ball) 移动
JOYHATMOTION 游戏手柄(Joystick) 移动
JOYBUTTONDOWN 游戏手柄按下
JOYBUTTONUP 游戏手柄放开
VIDEORESIZE Pygame窗口缩放
VIDEOEXPOSE Pygame窗口部分公开(expose)
USEREVENT 触发一个用户事件

注意,当使用 Pygame 做游戏开发时,上述事件并非都会应用的到,因此在学习的过程中,我们要懂得触类旁通、举一反三。

事件处理方法

L'utilisateur appuie sur le bouton de fermeture de la fenêtre ATIVEEVENT
名称 说明
pygame.event.get() 从事件队列中获取一个事件,并从队列中删除该事件
pygame.event.wait()  阻塞直至事件发生才会继续执行,若没有事件发生将一直处于阻塞状态
pygame.event.set_blocked()  控制哪些事件禁止进入队列,如果参数值为None,则表示禁止所有事件进入
pygame.event.set_allowed()   控制哪些事件允许进入队列
pygame.event.pump()  调用该方法后,Pygame 会自动处理事件队列
pygame.event.poll()  会根据实际情形返回一个真实的事件,或者一个None
pygame.event.peek()   检测某类型事件是否在队列中
pygame.event.clear() 从队列中清除所有的事件
pygame.event.get_blocked()  检测某一类型的事件是否被禁止进入队列
pygame.event.post()   放置一个新的事件到队列中
pygame.event.Event()  
🎜Pygame est activé ou masqué🎜🎜🎜🎜KEYDOWN🎜🎜Clavier enfoncé🎜🎜🎜🎜KEYUP🎜🎜Clavier libéré🎜🎜 🎜🎜MOUSEMOTION🎜🎜Mouse move🎜🎜🎜🎜MOUSEBUTTONDOWN🎜🎜Mouse press🎜🎜🎜🎜MOUSEBUTTONUP🎜🎜Mouse release🎜🎜 🎜🎜JOYAXISMO TION 🎜🎜Le contrôleur de jeu (Joystick ou pad) bouge🎜🎜🎜🎜JOYBALLMOTION 🎜🎜La balle de jeu (Joy ball) bouge🎜🎜🎜🎜JOYHATMOTION🎜🎜Jeu le contrôleur (Joystick) bouge🎜🎜🎜🎜<code>JOYBUTTONDOWN🎜🎜Appuyez sur le contrôleur de jeu🎜🎜🎜🎜JOYBUTTONUP🎜🎜Version du contrôleur de jeu🎜🎜🎜 🎜VIDEORESIZE🎜🎜Mise à l'échelle de la fenêtre Pygame🎜🎜🎜🎜VIDEOEXPOSE🎜🎜Partie de la fenêtre Pygame exposée (exposer)🎜🎜🎜🎜USEREVENT🎜🎜 déclencher un événement utilisateur🎜🎜🎜🎜🎜Notez que lorsque vous utilisez Pygame pour le développement de jeux, tous les événements ci-dessus ne sont pas applicables, donc dans le processus d'apprentissage, nous devons savoir comment tirer des inférences et tirer des inférences. 🎜🎜Méthode de gestion des événements🎜🎜🎜🎜🎜Nom🎜🎜Description🎜🎜🎜🎜🎜🎜pygame.event.get()🎜🎜Récupérez un événement dans la file d'attente des événements et récupérez-le from Supprimer l'événement de la file d'attente 🎜🎜🎜🎜pygame.event.wait() 🎜🎜Bloque jusqu'à ce que l'événement se produise et continuera à s'exécuter si aucun événement ne se produit, il restera bloqué 🎜🎜🎜. 🎜 pygame.event.set_blocked() 🎜🎜Contrôlez quels événements ne peuvent pas entrer dans la file d'attente. Si la valeur du paramètre est Aucun, cela signifie qu'il est interdit à tous les événements d'entrer🎜🎜🎜🎜 pygame.event.set_allowed() 🎜🎜Contrôlez quels événements sont autorisés à entrer dans la file d'attente🎜🎜🎜🎜pygame.event.pump() 🎜🎜Après avoir appelé cette méthode, Pygame le fera automatiquement traiter la file d'attente des événements🎜🎜🎜🎜pygame.event. poll() 🎜🎜 renverra un événement réel en fonction de la situation réelle, ou un Aucun🎜🎜🎜🎜pygame.event.peek () 🎜🎜Détecter si un certain type d'événement est dans la file d'attente 🎜🎜🎜🎜pygame.event.clear()🎜🎜Effacer tous les événements de la file d'attente🎜🎜🎜🎜pygame.event.get_blocked() 🎜🎜Détecter une certaine information indiquant si les événements de type sont interdits d'entrer dans la file d'attente🎜🎜🎜🎜pygame.event.post() 🎜🎜Placer un nouvel événement dans la file d'attente🎜🎜🎜🎜pygame.event.Event() 🎜🎜Créer un nouvel événement défini par l'utilisateur🎜🎜🎜🎜

Lorsque nous utilisons Pygame pour gérer des événements, la logique est généralement similaire. Vous devez d'abord déterminer le type d'événement, puis effectuer différentes actions de jeu pour chaque type d'événement. Par conséquent, les instructions if & else sont idéales pour cette situation. Comme indiqué ci-dessous :

import pygame

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

Gestion des événements de clavier

Nous pouvons utiliser l'attribut key fourni par l'événement de clavier pour obtenir la touche du clavier enfoncée. Pygame définit les touches alphabétiques, les touches numériques, les touches combinées et autres touches du clavier sous forme de constantes. Le tableau suivant répertorie les constantes de certaines touches couramment utilisées :

#🎜🎜. # NomDescriptionK_BACKSPACE#🎜🎜 # K_TABTab#🎜 🎜#
BackspaceK_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
#🎜🎜 #

K_CLEAR

Effacer la touche(Effacer)

#🎜🎜 #K_RETURN

Touche Entrée



K_PAUSE#🎜🎜 #

Pause

#🎜🎜 #

K_ESCAPE

Escape#🎜🎜 #

K_SPACE

Barre d'espace (Espace)
#🎜🎜##🎜🎜##🎜🎜# K_0...K_9#🎜🎜##🎜🎜#0&hellip ;9#🎜🎜##🎜🎜##🎜🎜##🎜🎜#K_a...Kz#🎜🎜##🎜🎜#a…z#🎜🎜##🎜🎜## 🎜🎜##🎜🎜#K_DELETE#🎜🎜##🎜🎜#Supprimer la touche (supprimer)# 🎜🎜##🎜🎜##🎜🎜##🎜🎜#K_KP0.. .K_KP9#🎜🎜##🎜🎜#0 (petit clavier)…9 (petit clavier)#🎜🎜 ##🎜🎜##🎜🎜##🎜🎜#K_F1...K_F15 #🎜🎜##🎜🎜#F1…F15#🎜🎜##🎜🎜##🎜🎜##🎜 🎜#K_UP#🎜🎜##🎜🎜#flèche vers le haut# 🎜🎜##🎜🎜##🎜🎜##🎜🎜#K_DOWN#🎜 🎜##🎜🎜#Flèche vers le bas#🎜🎜##🎜🎜##🎜🎜##🎜🎜#K_RIGHT#🎜🎜##🎜🎜#flèche droite flèche)#🎜🎜##🎜🎜##🎜🎜##🎜🎜#K_LEFT#🎜🎜##🎜🎜 #flèche gauche#🎜🎜##🎜🎜## 🎜🎜##🎜🎜#KMOD_ALT#🎜🎜##🎜🎜#Appuyez simultanément sur la touche Alt#🎜🎜##🎜🎜##🎜 🎜##🎜🎜##🎜🎜#passez ci-dessous l'exemple "Mouvement de l'image" pour comprendre le processus de traitement des événements du clavier, comme indiqué ci-dessous : #🎜🎜#
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()
#🎜🎜#Gestion des événements de souris#🎜🎜##🎜🎜# #🎜🎜#Pygame propose trois événements de souris, respectivement : le mouvement de la souris (MOUSEMOTION), la pression de la souris (MOUSEBUTTONDOWN) et le relâchement de la souris (MOUSEBUTTONUP). Différents types d'événements correspondent à différents attributs de membre. Comme indiqué ci-dessous : #🎜🎜##🎜🎜#pygame.event.MOUSEMOTION événement de mouvement de la souris#🎜🎜##🎜🎜# event.pos par rapport au coin supérieur gauche de la fenêtre, la valeur de coordonnée actuelle de la souris (x , y)#🎜🎜 # event.rel La distance de déplacement relative de la souris (X, Y), par rapport au dernier événement #🎜🎜# event.buttons L'état initial du bouton de la souris (0,0,0), correspondant à (bouton gauche, poulie, bouton droit), mouvement Cliquez sur cette touche pendant le processus, et la position correspondante deviendra 1#🎜🎜##🎜🎜#pygame.event.MOUSEBUTTONUP événement de libération du bouton de la souris#🎜🎜## 🎜🎜# event.pos par rapport au coin supérieur gauche de la fenêtre, les coordonnées actuelles de la souris Valeur (x,y)#🎜🎜# event.button le numéro du bouton de relâchement de la souris (entier) le bouton gauche est 1, la molette de défilement 2 est enfoncé, le bouton droit est 3#🎜🎜##🎜🎜#pygame.event.MOUSEBUTTONDOWN appuyez sur le bouton de la souris Événement suivant #🎜🎜##🎜🎜# event.pos Par rapport au coin supérieur gauche de la fenêtre, la valeur de coordonnée actuelle de la souris (x, y) #🎜🎜# event.button Le numéro du bouton de la souris (entier), le bouton gauche est 1, Appuyez sur la molette de défilement 2, faites un clic droit 3, faites rouler la molette 4 vers l'avant, faites rouler la molette 5 vers l'arrière #🎜🎜 ##🎜🎜#
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(&#39;鼠标按下&#39;, 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(&#39;鼠标弹起&#39;)
        pass
    if event.type == pygame.MOUSEMOTION:
        print(&#39;鼠标移动&#39;)
        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()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer