Rumah >pembangunan bahagian belakang >Tutorial Python >Cara menggunakan modul acara Acara Pygame dalam Python

Cara menggunakan modul acara Acara Pygame dalam Python

WBOY
WBOYke hadapan
2023-05-18 11:58:253034semak imbas

Modul Acara Pygame

Acara ialah salah satu modul penting Pygame Ia adalah teras membina keseluruhan program permainan, seperti klik tetikus yang biasa digunakan, ketik papan kekunci, pergerakan tetingkap permainan dan pelarasan. Saiz tetingkap, mencetuskan plot tertentu, keluar dari permainan, dsb., semuanya boleh dianggap sebagai "peristiwa".

Jenis Acara

Pygame mentakrifkan struktur yang khusus digunakan untuk mengendalikan acara, iaitu baris gilir acara ini mengikut prinsip asas "dahulu dilayan" dalam baris gilir beratur, kami Operasi pengguna (peristiwa tercetus) boleh diproses dengan teratur dan satu demi satu. Jadual berikut menyenaraikan acara permainan yang biasa digunakan dalam Pygame:

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

Perhatikan bahawa apabila menggunakan Pygame untuk pembangunan permainan, tidak semua acara di atas boleh digunakan, jadi semasa proses pembelajaran, Kita mesti tahu cara membuat inferens dan membuat inferens.

Kaedah pengendalian acara

名称 说明
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()   创建一个用户自定义的新事件

Apabila kami menggunakan Pygame untuk mengendalikan acara, logiknya pada umumnya serupa. Anda perlu menentukan jenis acara dahulu, dan kemudian mengambil tindakan permainan yang berbeza untuk setiap jenis acara. Oleh itu, pernyataan if & else sesuai untuk situasi ini. Seperti yang ditunjukkan di bawah:

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('键盘弹起')

Mengendalikan acara papan kekunci

Kita boleh menggunakan atribut kekunci yang disediakan oleh acara papan kekunci untuk mendapatkan kekunci papan kekunci yang ditekan. Pygame mentakrifkan kekunci huruf, kekunci angka, kekunci gabungan dan kekunci lain pada papan kekunci dalam bentuk pemalar Jadual berikut menyenaraikan pemalar beberapa kekunci yang biasa digunakan:

名称 说明
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 同时按下Alt键

Berikut ialah contoh. "pergerakan gambar" Untuk memahami proses pemprosesan peristiwa papan kekunci, seperti yang ditunjukkan di bawah:

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()

Memproses acara tetikus

Pygame menyediakan tiga acara tetikus, iaitu pergerakan tetikus (MOUSEMOTION) dan tetikus tekan (MOUSEBUTTONDOWN), pelepas tetikus (MOUSEBUTTONUP), jenis acara yang berbeza sepadan dengan atribut ahli yang berbeza. Seperti yang ditunjukkan di bawah:

pygame.event.MOUSEMOTION acara pergerakan tetikus

event.pos relatif kepada penjuru kiri sebelah atas tetingkap, nilai koordinat semasa tetikus (x, y)
event.rel mouse Jarak pergerakan relatif (X, Y), relatif kepada acara terakhir
event.buttons Keadaan awal butang tetikus (0,0,0), sepadan dengan (butang kiri, takal, kanan butang) masing-masing, butang mana yang diklik semasa pergerakan, Kedudukan yang sepadan akan bertukar kepada 1

pygame.event.MOUSEBUTTONUP acara pelepasan butang tetikus

acara.pos berbanding sudut kiri atas tetingkap, nilai koordinat semasa tetikus (x, y)
acara .butang Nombor kunci pelepas tetikus (integer) Butang kiri ialah 1, roda skrol ditekan 2, butang kanan ialah 3

pygame.event.MOUSEBUTTONDOWN Acara tekan butang tetikus

event.pos relatif kepada Sudut kiri atas tetingkap, nilai koordinat semasa tetikus (x, y)
event.butang butang tetikus nombor (integer), butang kiri ialah 1, tekan roda skrol 2, butang kanan ialah 3, tatal ke hadapan 4, Takal guling ke belakang 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()

Atas ialah kandungan terperinci Cara menggunakan modul acara Acara Pygame dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam