Python 之 pygame 学习(事件 event)

本节重点理解 Pygame 里的事件

一、事件

  1. 事件
    上一个程序中,点击关闭窗口产生一个 QUIT 事件,Pygame 会接受用户的各种操作(比如按键盘,移动鼠标等)产生事件。
    事件随时可能发生,而且量也可能很大,Pygame 的做法是把一系列的事件存放在一个队列里,逐个的处理
  2. 事件检索
    上一个程序我们使用 Pygame.get() 来处理所有的事件,这如同打开大门所有人可以进入。如果使用 Pygame.event.wait(),Pygame 就会等到下一个事件才继续下去。
  3. 常用事件集
事件产生途径参数
QUIT用户按下关闭按钮none
ATIVEEVENTPygame被激活或者隐藏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
VIDEORESIZEPygame窗口缩放size, w, h
VIDEOEXPOSEPygame窗口部分公开(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() # 更新显示整个内容

效果图
在这里插入图片描述

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

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)

效果图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值