Image의 위치를 키보드로 제어하기 > Pygame - python GUI module

본문 바로가기
사이트 내 전체검색

회원로그인

올서베이넷
무료 온라인 설문 사이트
OVITII
웹 프레젠테이션 도구

Pygame - python GUI module

Image의 위치를 키보드로 제어하기

페이지정보

글쓴이 관리자 조회 33,261 조회 날짜 20-02-22 13:16 / Update:20-03-05 14:10
댓글 0 댓글

SNS 공유

  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기

내용

Image의 위치를 키보드로 제어하기

 

 

이전 강좌에서 이미지를 자동으로 움직이는 기능을 완성해 보았다.

참고 : https://www.jbmpa.com/pygame/6

 

이번에는 이미지를 키보드의 화살표키로 움직이게 하는 방법을 알아보자.

 

 

1. 이벤트에서 이미지의 좌표값을 증가시키기

 

event 처리 강좌에서 키보드의 키 이벤트를 받아서 처리하는 코드를 알 수 있었다.

참고 : https://www.jbmpa.com/pygame/3

 

이 것을 응용하여, 키에 따라 이미지의 좌표값을 증가시켜 본다.

 

이미지의 x 좌표값 증가를 위한 변수 dx, y 좌표값의 증가를 위한 변수 dy를 추가한다.

 

dx = 0

dy = 0

 

while playing:

 

    for event in pygame.event.get():

 

        if event.type == pygame.QUIT:
            playing = False
            pygame.quit()

 

        # 키가 눌렸을 때

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                dx = -5
            if event.key == pygame.K_RIGHT:
                dx = 5

            if event.key == pygame.K_UP:
                dy = -5
            if event.key == pygame.K_DOWN:
                dy = 5

 

        # 키가 떼졌을 때
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                dx = 0
            if event.key == pygame.K_RIGHT:
                dx = 0

            if event.key == pygame.K_UP:
                dy = 0
            if event.key == pygame.K_DOWN:
                dy = 0

 

 

키가 떼졌을 때, 증가값을 0으로 만드는 이유는 화살표 키를 뗐을 때, 더이상 움직이지 않게 하기 위함이다.

 

 

 

2. 좌표값 증가값을 적용시키기

 

게임 루프안에서 dx 를 player_Rect.x 에, dy 를 player_Rect.y 에 적용시킨다.

player_Rect.x += dx

player_Rect.y += dy

 

 

 

3. 키 이벤트를 적용시킨 전체 코드

 

https://www.jbmpa.com/pygame/5 의 7번 코드에서 키 이벤트를 적용시킨 코드를 추가한다.

 

import pygame

 

# 스크린 전체 크기 지정

SCREEN_WIDTH = 400
SCREEN_HEIGHT  = 500

 

# pygame 초기화

pygame.init()

 

# 스크린 객체 저장
SCREEN = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("pygame test")

 

# FPS를 위한 Clock 생성
clock = pygame.time.Clock()

 

# 이미지 로딩 및 크기 변경

player = pygame.image.load("Player.png")
player = pygame.transform.scale(player, (40, 102))

 

# 이미지의 Rect 정보를 저장

player_Rect = player.get_rect()

 

# 이미지가 가운데 올 수 있도록 좌표값 수정

# python 3.8 이상에서 integer가 필요한 곳에 float가 들어가면 DeprecationWarning이 나옴.

# 따라서 round() 처리를 해준다.

player_Rect.centerx = round(SCREEN_WIDTH / 2)

player_Rect.centery = round(SCREEN_HEIGHT / 2)

 

dx = 0

dy = 0

 

playing = True
while playing:

    # 이벤트 처리
    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            playing = False
            pygame.quit()

 

        # 키가 눌렸을 때

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                dx = -5
            if event.key == pygame.K_RIGHT:
                dx = 5

            if event.key == pygame.K_UP:
                dy = -5
            if event.key == pygame.K_DOWN:
                dy = 5

 

        # 키가 떼졌을 때
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                dx = 0
            if event.key == pygame.K_RIGHT:
                dx = 0

            if event.key == pygame.K_UP:
                dy = 0
            if event.key == pygame.K_DOWN:
                dy = 0

 

    # 스크린 배경색 칠하기

    SCREEN.fill((255, 255, 255))

 

    # 키에 의해 증가된 값을 이미지의 좌표에 적용시킨다.

    player_Rect.x += dx

    player_Rect.y += dy

 

    # 스크린의 원하는 좌표에 이미지 복사하기, 좌표값은 Rect를 이용

    SCREEN.blit(player, player_Rect)

 

    # 작업한 스크린의 내용을 갱신하기

    pygame.display.flip()

 

    # 1초에 60번의 빈도로 순환하기

    clock.tick(60)
 

 

 

실행 결과

 

키보드의 화살표 키에 따라 이미지가 움직이는 것을 확인한다.

 

2921044682_1582403235.7423.gif

댓글목록 sfs

총 22 건 , 1 페이지
게시물 검색
Pygame - python GUI module 목록
번호 제목 글쓴이 조회 날짜
1 관리자 53050 02-21
2 관리자 43915 02-22
3 관리자 40796 02-24
4 관리자 39916 02-22
5 관리자 38766 02-22
6 관리자 36675 02-21
7 관리자 35109 02-23
8 관리자 33973 02-22
9 관리자 33860 03-10
열람중 관리자 33262 02-22
11 관리자 33068 02-27
12 관리자 29754 02-25
13 관리자 29431 04-05
14 관리자 29406 02-21
15 관리자 28062 03-11
16 관리자 27616 03-05
17 관리자 26938 03-11
18 관리자 26105 03-11
19 관리자 23758 03-11
20 관리자 23227 04-05
21 관리자 21802 03-10
22 관리자 20866 03-11
GNUBOARD_M
Copyright © JBMPA.com All rights reserved.