Python 之 pygame 学习(事件 event)

本节重点理解 Pygame 里的事件

文章目录

    • 一、事件
    • 二、简单示例
    • 三、将事件打印到屏幕上显示
    • 四、改进上节的代码增加键盘控制

一、事件

  1. 事件
    上一个程序中,点击关闭窗口产生一个 QUIT 事件,Pygame 会接受用户的各种操作(比如按键盘,移动鼠标等)产生事件。
    事件随时可能发生,而且量也可能很大,Pygame 的做法是把一系列的事件存放在一个队列里,逐个的处理
  2. 事件检索
    上一个程序我们使用 Pygame.get() 来处理所有的事件,这如同打开大门所有人可以进入。如果使用 Pygame.event.wait(),Pygame 就会等到下一个事件才继续下去。
  3. 常用事件集
事件 产生途径 参数
QUIT 用户按下关闭按钮 none
ATIVEEVENT Pygame被激活或者隐藏 gain, state
KEYDOWN 键盘被按下 unicode, key, mod
KEYUP 键盘被放开 key, mod
MOUSEMOTION 鼠标移动 pos, rel, buttons
MOUSEBUTTONDOWN 鼠标按下 pos, button
MOUSEBUTTONUP 鼠标放开 pos, button
JOYAXISMOTION 游戏手柄(Joystick or pad)移动 joy, axis, value
JOYBALLMOTION 游戏球(Joy ball)移动 joy, axis, value
JOYHATMOTION 游戏手柄(Joystick)移动 joy, axis, value
JOYBUTTONDOWN 游戏手柄按下 joy, button
JOYBUTTONUP 游戏手柄放开 joy, button
VIDEORESIZE Pygame窗口缩放 size, w, h
VIDEOEXPOSE Pygame窗口部分公开(expose) none
USEREVENT 触发了一个用户事件 code

二、简单示例

将鼠标键盘操作打印到文本中

import pygame
import sys

pygame.init()

size = width,height=600,400
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Hello World")

f = open("recond.txt",'w')

while True:
    for event in pygame.event.get():
        f.write(str(event) + '\n')

        if event.type == pygame.QUIT:
            f.close()
            sys.exit() # 退出程序

三、将事件打印到屏幕上显示

import pygame
import sys

pygame.init()
size = width,height=600,400
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Test_Demo")
bg = (0,0,0)

font = pygame.font.Font(None,20)
line_height = font.get_linesize()
position = 0
screen.fill(bg)
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        # render(文本,抗锯齿,颜色,背景=无),这里文本被显示为绿色
        screen.blit(font.render(str(event),True,(0,255,0)),(0,position))
        position += line_height
        # 显示到屏幕底部时,刷新重新记录
        if position > height:
            position = 0
            screen.fill(bg)
    pygame.display.flip() # 更新显示整个内容

效果图
Python 之 pygame 学习(事件 event)_第1张图片

四、改进上节的代码增加键盘控制

import pygame
import sys
from pygame.locals import *
# 初始化 pygame
pygame.init()

size = width,height = 600,400
speed = [-2,1]
bg = (255,255,255) # 背景设置为白色

# 创建指定大小的窗口 Surface
screen = pygame.display.set_mode(size)
# 设置窗口的标题
pygame.display.set_caption("初次见面,请大家多多关照")
# 加载图片
chicken = pygame.image.load("chicken.png")
l_head = chicken
# pygame.transform.flip(Surface,xbool,ybool),垂直或者水平翻转
# 这里设置水平翻转
r_head = pygame.transform.flip(chicken,True,False)
# 获得图像的位置矩形
position = chicken.get_rect()

# 设置为死循环,确保窗口一直显示
while True:
    # 遍历所有的事件
    for event in pygame.event.get():
        # 如果单击关闭窗口,则退出
        if event.type == pygame.QUIT:
            sys.exit()
        # 根据键盘操作来控制小鸡的移动
        if event.type == KEYDOWN:
            if event.key == K_LEFT:
                chicken = r_head
                speed = [-1,0]
            if event.key == K_RIGHT:
                chicken = l_head
                speed = [1,0]
            if event.key == K_UP:
                speed = [0, -1]
            if event.key == K_DOWN:
                speed = [0, 1]
    # 移动图像
    position = position.move(speed)
    # 反转图像
    if position.left < 0 or position.right > width:
        chicken = pygame.transform.flip(chicken,True,False)
        # 反方向移动
        speed[0] = -speed[0]

    if position.top < 0 or position.bottom > height:
        speed[1] = -speed[1]
    # 填充背景
    screen.fill(bg)
    # 更新图像
    screen.blit(chicken,position)
    # 更新界面
    pygame.display.flip()
    # 延迟 5 毫秒
    pygame.time.delay(5)

效果图

你可能感兴趣的:(Pygame学习,Python,之,pygame,学习(二))