zoukankan      html  css  js  c++  java
  • Python Pygame (2) 事件

    程序在运行期间会产生许许多多的事件,事件随时可能发生(如移动鼠标,点击鼠标,敲击键盘按键),Pygame的做法是将所有的事件都放到事件队列里,通过for循环语句迭代取出每一条事件,然后处理关注的事件即可。

    下面的代码可以将程序运行过程中产生的所有事件都记录并存放到一个文件中:

    import pygame
    import sys
    
    # 初始化Pygame
    pygame.init()
    
    size = width, height = 600, 400
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("初次见面,请大家多多关照!")
    
    f = open("record.txt", 'w')
    
    while True:
        for event in pygame.event.get():
            f.write(str(event) + '
    ')
            if event.type == pygame.QUIT:
                f.close()
                sys.exit()

    接下来我们想要将程序运行中产生的事件都显示在屏幕上。这就要涉及到在屏幕上显示文字的功能,或者说是在Surface上显示文字,但pygame并不能办法直接在Surface对象上面显示文字,因此需要调用font模块的render()方法,将文字渲染成为Surface对象,这样就可以调用blit()方法讲一个Surface对象放到另外一个上了。

    import pygame
    import sys
    
    # 初始化Pygame
    pygame.init()
    
    size = width, height = 600, 400
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("FishC Demo")
    bg = (0, 0, 0)#黑色的背景
    #创建font对象
    font = pygame.font.Font(None, 20)
    #第一个参数指定字体,第二个参数指定字体的尺寸
    line_height = font.get_linesize()
    #调用get_linesize()方法获得每行文本的高度
    position = 0
    screen.fill(bg)
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
    
            screen.blit(font.render(str(event), True, (0, 255, 0)), (0, position))
            #render方法将文本渲染成Surface对象
            #第一个参数是待渲染的文本
            #第二个参数是指定是否消除锯齿
            #第三个参数指定文本的颜色
            position += line_height
            
            if position > height:#满屏时清屏
                position = 0
                screen.fill(bg)
    
        pygame.display.flip()

    程序运行显示效果:

    这里再列举Pygame常用的事件及其含义:

    利用所学的关于事件的知识,这里将小乌龟设置成可以被控制移动。

    import pygame
    import sys
    from pygame.locals import *#将pygame的所有常量名导入
    
    # 初始化Pygame
    pygame.init()
    
    size = width, height = 600, 400
    speed = [0, 0]
    bg = (255, 255, 255) # RGB
    
    # 创建指定大小的窗口 Surface
    screen = pygame.display.set_mode(size)
    # 设置窗口标题
    pygame.display.set_caption("初次见面,请大家多多关照!")
    
    # 加在图片
    turtle = pygame.image.load("turtle.png")
    # 获得图像的位置矩形
    position = turtle.get_rect()
    
    l_head = turtle#左转
    r_head = pygame.transform.flip(turtle, True, False)#右转
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
    
            if event.type == KEYDOWN:
                if event.key == K_LEFT:
                    turtle = l_head
                    speed = [-10, 0]#向左移动
                if event.key == K_RIGHT:
                    turtle = r_head
                    speed = [10, 0]#向右移动
                if event.key == K_UP:
                    speed = [0, -10]#向上移动
                if event.key == K_DOWN:
                    speed = [0, 10]#向右移动
    
        # 移动图像
        position = position.move(speed)
        speed = [0, 0]
        if position.left < 0 or position.right > 
            #翻转图像
            turtle = pygame.transform.flip(turtle, True, False)
            # 反方向移动
            speed[0] = -speed[0]
        if position.top < 0 or position.bottom > height:
            speed[1] = -speed[1]
    
        # 填充背景
        screen.fill(bg)
        # 更新图像
        screen.blit(turtle, position)
        # 更新界面
        pygame.display.flip()
        # 延迟10毫秒
        pygame.time.delay(10)

    这里再给出一些表示键盘上按键的键盘常量的列表,来自pygame官网。https://www.pygame.org/docs/ref/key.html

    KeyASCII      ASCII   Common Name
    K_BACKSPACE         backspace
    K_TAB               tab
    K_CLEAR               clear
    K_RETURN            return
    K_PAUSE               pause
    K_ESCAPE      ^[      escape
    K_SPACE               space
    K_EXCLAIM     !       exclaim
    K_QUOTEDBL    "       quotedbl
    K_HASH        #       hash
    K_DOLLAR      $       dollar
    K_AMPERSAND   &       ampersand
    K_QUOTE               quote
    K_LEFTPAREN   (       left parenthesis
    K_RIGHTPAREN  )       right parenthesis
    K_ASTERISK    *       asterisk
    K_PLUS        +       plus sign
    K_COMMA       ,       comma
    K_MINUS       -       minus sign
    K_PERIOD      .       period
    K_SLASH       /       forward slash
    K_0           0       0
    K_1           1       1
    K_2           2       2
    K_3           3       3
    K_4           4       4
    K_5           5       5
    K_6           6       6
    K_7           7       7
    K_8           8       8
    K_9           9       9
    K_COLON       :       colon
    K_SEMICOLON   ;       semicolon
    K_LESS        <       less-than sign
    K_EQUALS      =       equals sign
    K_GREATER     >       greater-than sign
    K_QUESTION    ?       question mark
    K_AT          @       at
    K_LEFTBRACKET [       left bracket
    K_BACKSLASH          backslash
    K_RIGHTBRACKET ]      right bracket
    K_CARET       ^       caret
    K_UNDERSCORE  _       underscore
    K_BACKQUOTE   `       grave
    K_a           a       a
    K_b           b       b
    K_c           c       c
    K_d           d       d
    K_e           e       e
    K_f           f       f
    K_g           g       g
    K_h           h       h
    K_i           i       i
    K_j           j       j
    K_k           k       k
    K_l           l       l
    K_m           m       m
    K_n           n       n
    K_o           o       o
    K_p           p       p
    K_q           q       q
    K_r           r       r
    K_s           s       s
    K_t           t       t
    K_u           u       u
    K_v           v       v
    K_w           w       w
    K_x           x       x
    K_y           y       y
    K_z           z       z
    K_DELETE              delete
    K_KP0                 keypad 0
    K_KP1                 keypad 1
    K_KP2                 keypad 2
    K_KP3                 keypad 3
    K_KP4                 keypad 4
    K_KP5                 keypad 5
    K_KP6                 keypad 6
    K_KP7                 keypad 7
    K_KP8                 keypad 8
    K_KP9                 keypad 9
    K_KP_PERIOD   .       keypad period
    K_KP_DIVIDE   /       keypad divide
    K_KP_MULTIPLY *       keypad multiply
    K_KP_MINUS    -       keypad minus
    K_KP_PLUS     +       keypad plus
    K_KP_ENTER          keypad enter
    K_KP_EQUALS   =       keypad equals
    K_UP                  up arrow
    K_DOWN                down arrow
    K_RIGHT               right arrow
    K_LEFT                left arrow
    K_INSERT              insert
    K_HOME                home
    K_END                 end
    K_PAGEUP              page up
    K_PAGEDOWN            page down
    K_F1                  F1
    K_F2                  F2
    K_F3                  F3
    K_F4                  F4
    K_F5                  F5
    K_F6                  F6
    K_F7                  F7
    K_F8                  F8
    K_F9                  F9
    K_F10                 F10
    K_F11                 F11
    K_F12                 F12
    K_F13                 F13
    K_F14                 F14
    K_F15                 F15
    K_NUMLOCK             numlock
    K_CAPSLOCK            capslock
    K_SCROLLOCK           scrollock
    K_RSHIFT              right shift
    K_LSHIFT              left shift
    K_RCTRL               right control
    K_LCTRL               left control
    K_RALT                right alt
    K_LALT                left alt
    K_RMETA               right meta
    K_LMETA               left meta
    K_LSUPER              left Windows key
    K_RSUPER              right Windows key
    K_MODE                mode shift
    K_HELP                help
    K_PRINT               print screen
    K_SYSREQ              sysrq
    K_BREAK               break
    K_MENU                menu
    K_POWER               power
    K_EURO                Euro

  • 相关阅读:
    Java实现继承过程概述
    Java封装概述
    Java中包的介绍
    Java中final关键字概述
    Java继承概述
    mysql服务自动关闭的解决
    Unity3d碰撞检测中碰撞器与触发器的区别
    解决在Game模式下兼容编辑器模式
    GameObject.Find("")只能查找到显示的对象
    层(layer)的设置
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/10446321.html
Copyright © 2011-2022 走看看