Lecture 키 이벤트

Lecture • Views 31 • Comments 0 • Last Updated at 5 days ago  
  • 이벤트
  • 키이벤트

키 이벤트

눌린 키가 키상수와 같을때 명령이 동작하게하기 위한 루틴은 다음과 같다. 키를 누를때마다 한번씩 실행된다.

import pygame
pygame.init( )

#색설정
BLACK= ( 0, 0, 0)
WHITE = (255, 255, 255)
BLUE = ( 0, 0, 255)
RED = (255, 0, 0)

#화면설정
size = [1200, 300]
screen = pygame.display.set_mode(size)
font= pygame.font.SysFont('Verdana', 20)
pygame.display.set_caption(”KEYDOWN/KEYUP 이벤트 처리하기 ∼”)

#메인 루프
running = True
keyFlag = None
clock = pygame.time.Clock( )

#텍스트출력함수
def dispText(dispMessage, txtColor='BLACK', start_pos=(50, 50)):
    textSurface = font.render(dispMessage, True, pygame.Color(txtColor), None)
    textRect = textSurface.get_rect( )
    textRect.topleft = start_pos
    screen.blit(textSurface, textRect)

while running:
    clock.tick(10)
    #이벤트루프
    for event in pygame.event.get( ):
        if event.type == pygame.KEYDOWN:
            # 전체 키보드의 키 상태 값 반환
            pressed= pygame.key.get_pressed( )
            #눌린키들의목록저장
            Keys = [pygame.key.name(keyName) for keyName, pressedKeyValue in enumerate(pressed) if pressedKeyValue]
            eventMessage = str(event)
            keyFlag = True
        elif event.type == pygame.KEYUP:
            keyFlag = False
        elif event.type== pygame.QUIT:
            running = False
    screen.fill(WHITE)

    #키를누르면
    if keyFlag ==True:
        dispText(’Key Down!! ', 'RED')
        #첫번째키만반환
        dispText('Pressed Key: ' + Keys[0], 'RED', (50, 90))
        dispText('eventMessage :' + eventMessage, 'RED', (50, 130))
    #키를해제하면
    elif keyFlag == False:
        dispText('Key Up!! ', 'BLUE')
    # 아무것도 하지 않은 경우
    else:
        dispText('Please press any key.')
    pygame.display.flip( )
pygame.quit( )

K_[1~10]은 K_1부터 K_10까지를 의미한다.

if event.type == pygame.KEYDOWN:
   if event.key == pygame.키상수:
      명령 모음

pygame.key.get_pressed()를 사용할 수 있습니다. 이 함수는 모든 키의 목록과 현재 눌렸는지 여부를 반환합니다.

keys = pygame.key.get_pressed()
if keys[pygame.K_UP]:
   p.move(up=True)
if keys[pygame.K_DOWN]:
   p.move(down=True)
if keys[pygame.K_LEFT]:
   p.move(left=True)
if keys[pygame.K_RIGHT]:
   p.move(right=True)

키를 누르고 있을때 연속적으로 동작되게하기위해서는

keys = pygame.key.get_pressed()
if keys[키상수]:
    명령 모음

혹은

for event in pygame.event.get():
   if event.type == pygame.KEYDOWN:
      if event.key == pygame.키상수:
         변수 설정
   if event.type == pygame.KEYUP   
      if event.key == pygame.키상수
         변수해제
if 변수:      
   명령 모음

키 상수

상수 설명 상수 설명 상수 설명 상수 설명
K_[0~9] 0~9 K_[a~z] a~z K_F[1~15] F1~F15 K_KP[0~9] keypad 0~9
상수 설명 상수 설명 상수 설명
K_UP up arrow K_DOWN down arrow K_RIGHT right arrow
K_LEFT left arrow K_DELETE delete K_INSERT insert
K_HOME home K_END end K_PAGEUP page up
K_PAGEDOWN page down 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 K_AC_BACK Android back button
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_BACKQUOTE grave 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_KP_PERIOD keypad period
K_KP_DIVIDE keypad divide K_KP_MULTIPLY keypad multiply K_KP_EQUALS keypad equals
K_KP_MINUS keypad minus K_KP_PLUS keypad plus K_KP_ENTER keypad enter
previous article
next article
Comments
Feel free to ask a question, answer or comment, etc.