• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    pygame实现键盘和鼠标事件的处理

    所谓事件,就是程序上发生的事。例如用户按下键盘上的某个键或者单击、移动鼠标,对于这些事件,游戏程序需要作出反应。如《 pygame 图像/图形绘制》中例子,程序会一直运行下去,直到用户关闭窗口而产生一个 QUIT 事件,pygame 会接收用户的各种操作(例如按键盘上的键、移动鼠标等)产生事件。事件随时可能发生,而且量可能会很大,pygame 的做法是把一系列的事件存放到一个队列里逐个处理。

    在上节例子中使用了 pygame.event.get() 来处理所有事件,如果使用 pygame.event.wait() , pygame 会等到发生一个事件时才继续下去,一般在游戏中不太实用,因为游戏往往是需要动态运作的。pygame 的常用事件如下所示:

    事件 产生途径 参数
    QUIT 用户按下“关闭”按钮 None
    ACTIVEEVENT pygame 被激活或者隐藏 gain 、state
    KEYDOWN 键盘被按下 unicode 、key 、mod
    KEYUP 键盘被放开 key 、mod
    MOUSEMOTION 鼠标移动 pos 、rel 、buttons
    MOUSEBUTTONDOWN 鼠标被按下 pos 、button
    MOUSEBUTTONUP 鼠标被放开 pos 、button

    1. pygame 的键盘事件的处理

    通常用 pyagme.event.get() 获取所有事件,若 event.type == KEYDOWN , 这时是键盘事件,再判断按键的 event.key 的种类(即 K_a 、 K_b 、 K_LEFT 这种形式)。用户也可以使用 pygame.key.get_pressed() 来获取所有被按下的键值,对应的就是键是否被按下。

    keys_pressed = pygame.key.get_pressed()
    if keys_pressed[K_SPACE]:
      # 空格键被按下
      fire()      # 发射子弹

    在 key 模块下有很多函数,如下:

    使用 pygame 开发一个由用户控制坦克移动的游戏。在上节例子的基础上增加通过方向键控制坦克移动的功能,并为游戏增加背景图片。代码如下:

    import pygame
    def tank_play():
      pygame,inite()
      tank_image = pygame.image.load("../images/tank.png")
      tank_rect = tank_image.get_rect()
      back_image = pygame.iamge.load("../images/background2.jpg")
      back_rect = back_image.get_rect()
      screen = pygame.display.set_mode(back_rect.size)
      pygame.display.set_caption("用户方向键控制移动的坦克")
      offset = 2   # 偏移量
      fps_clock = pygame.time.Clock()
      while True:
        fps_clock.tick(60)
        for event in pygame.event.get():
          if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        keys_pressed = pygame.key.get_presssed()
        if keys_pressed[pygame.K_RIGHT]:
          tank_rect.x += offset
        if keys_pressed[pygame.K_LEFT]:
          tank_rect.x -= offset
        if keys_pressed[oygame.K_UP]:
          tank_rect.y -= offset
        if keys_pressed[pygame.K_DOWN]:
          tank_rect.y += offset
        tank_rect.clamp_ip(back_rect)
        screen.blit(back_image, back_rect)
        screen.blit(tank_image, tank_rect)
        pygame.display.update()
          
    if __name__ == '__main--':
      tank_play()

    当用户按下方向键时坦克按指定方向移动,释放方向键时坦克停止移动。如下所示:

    2. pygame 的鼠标事件的处理

    pygame.mouse 的函数如下:

    例如:x, y = pygame.mouse.get_pos() 用于获取鼠标位置。

    演示鼠标事件的处理程序,代码如下:

    from math import pi
    from random import randint
    import pygame
    
    pygame.init()
    screen = pygame.display.set_mode((640, 480))
    points = []
    while True:
      for event in pygame.event.get():
        if event.type == pygame.QUIT:
          pygame.quit()
          exit()
      	if event.type == pygame.KEYDOWN:
          # 按任意键可清屏,并把点恢复到原始状态
          points = []
          srceen.fill((255, 255, 255))   # 用白色填充窗口背景
        if event.type == pygame.MOUSEBUTTONDOWN:	# 鼠标按下
          screen.fill((255, 255, 255))
          # 画随机矩形
          rc = (255, 0, 0)	# 红色
          rp = (randint(0, 639), randint(0, 479))
          rs = (639 - randint(rp[0], 639), 479 - randint(rp[1], 479))
          pygame.draw.rect(screen, rc, pygame.Rect(rp, rs))
          # 画随机圆形
          rc = (0, 255, 0)	# 绿色
          rp = (randint(0, 639), randint(0, 479))
          rr = randint(1, 200)
          pygame.draw.circle(screen, rc, rp, rr)
          # 获取当前鼠标单击位置
          x, y = pygame.mouse.get_pos()
          points.append((x, y))
          # 根据单击位置画弧线
          angle = (x / 639) * pi * 2
          pygame.draw.arc(screen, (0, 0, 0), (0, 0, 639, 479), 0, angle, 3)
          # 根据单击位置画椭圆
          pygame.draw.ellipse(screen, (0, 255, 0), (0, 0, x, y))
          # 从左上和右下画两根连线到单击位置
          pygame.draw.line(screen, (0, 0, 255), (0, 0), (x, y))
          pygame.draw.line(screen, (255, 0, 0), (640, 480), (x, y))
          # 画单击轨迹图
          if len(points) > 1:
            pygame.draw.lines(screen, (155, 155, 0), points, False, 2)
          # 把鼠标单击的每个点画明显点
          for p in points:
            pygame.draw.circle(screen, (155, 155, 155), p, 3)
    	pygame.display.update()

    运行这个程序,在窗口上单击鼠标就会有图形出来,按键盘上任意键可清屏重新开始。如下:

    到此这篇关于pygame实现键盘和鼠标事件的处理的文章就介绍到这了,更多相关pygame 键盘和鼠标事件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 详解pygame捕获键盘事件的两种方式
    • Python中pygame的mouse鼠标事件用法实例
    • python基于pygame实现响应游戏中事件的方法(附源码)
    • 详解Python中Pygame键盘事件
    上一篇:详解Python 关联规则分析
    下一篇:pandas 使用insert插入一列
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    pygame实现键盘和鼠标事件的处理 pygame,实现,键盘,和,鼠标,