Image를 자동으로 움직이게 하기 > Pygame - python GUI module

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

회원로그인

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

Pygame - python GUI module

Image를 자동으로 움직이게 하기

페이지정보

글쓴이 관리자 조회 44,828 조회 날짜 20-02-22 12:12 / Update:20-03-05 14:09
댓글 0 댓글

SNS 공유

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

내용

Image를 자동으로 움직이게 하기

 

 

pygame에서의 객체들은 게임 루프안에서 동작하도록 코딩한다.

따라서 게임 루프는 끊임없이 반복하므로, 이미지의 위치를 조금씩 변경해주면 이미지가 이동하는 것이 된다. 

 

 

1. 위에서 아래로 자동으로 이동하는 이미지 

 

이미지가 위에서 아래로 움직이려면, 이미지의 y값이 계속 증가하면 된다.

pygame의 y좌표값은 보통 수학에서 말하는 y좌표와는 다르게 아래로 갈 수록 값이 늘어나고 위로 갈수록 값이 줄어든다.

 

따라서 이미지의 y 좌표값을 증가시키는 코드를 게임 루프안에 넣는다면 이미지는 자동으로 아래로 움직일 것이다.

 

https://www.jbmpa.com/pygame/5 의 7번 코드에서 y 좌표값만 증가하는 코드를 추가하고 실행해본다.

 

 

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)

 

playing = True
while playing:

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

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

 

    # 스크린 배경색 칠하기

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

    

    # 이미지의 y 좌표값을 5씩 증가

    player_Rect.y += 5

 

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

    SCREEN.blit(player, player_Rect)

 

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

    pygame.display.flip()

 

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

    clock.tick(60)
 

 

실행화면

 

2921044682_1582399300.4143.gif

 

실제 실행화면은 반복되지 않고, 화면 아래로 사라지면 다시는 이미지가 나타나지 않는다. 이유는 y 좌표값이 계속 증가하므로 이미지는 우리가 보는 화면 아래로 계속 멀어지기 때문이다.

 

 

 

2. 이미지가 화면 밖으로 벗어나면, 다시 나타나게 하기

 

이미지가 화면 밖으로 벗어나면 다시 나타나지 않는다. 이때 화면 밖으로 벗어난 이미지를 다시 화면으로 나타나게 할 수 있다.

 

이것은 이미지의 좌표와 SCREEN의 사이즈를 비교하여 계산할 수 있다.

 

1번 코드에서 이미지가 화면 아래로 벗어났다는 것은 어떻게 알 수 있을까?

pygame에서의 위치는 모두 좌표값과 사이즈로 나타낼 수 있다. 

이미지가 SCREEN 아래로 벗어났다는 것은 이미지의 y 좌표값이 SCREEN의 HEIGHT보다 더 커졌다는 것을 의미한다.

 

2921044682_1582400033.6795.png

 

 

따라서 다음 코드를 통해 아래로 사라진 이미지를 다시 위에서 나타나게 한다.

 

# 이미지의 y 좌표값이 SCREEN의 높이보다 커지면

# 이미지의 y 좌표값을 (0 - 이미지의 높이) 로 변경한다.

# 또는 이미지의 Rect 값의 bottom 값을 0으로 만든다.

if player_Rect.y > SCREEN_HEIGHT:

    player_Rect.y = 0 - player_Rect.height

    # 또는

    # player_Rect.bottom = 0

 

 

위의 코드를 추가하여 코드를 완성시켜 본다.

 

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)

 

playing = True
while playing:

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

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

 

    # 스크린 배경색 칠하기

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

    

    # 이미지의 y 좌표값을 5씩 증가

    player_Rect.y += 5

 

    # 이미지의 y 좌표값이 SCREEN의 높이보다 커지면

    # 이미지의 y 좌표값을 (0 - 이미지의 높이) 로 변경한다.

    # 또는 이미지의 Rect 값의 bottom 값을 0으로 만든다.

    if player_Rect.y > SCREEN_HEIGHT:

        player_Rect.y = 0 - player_Rect.height

        # 또는

        # player_Rect.bottom = 0

 

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

    SCREEN.blit(player, player_Rect)

 

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

    pygame.display.flip()

 

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

    clock.tick(60)
 

 

실행 결과

 

2921044682_1582400647.2663.gif

 

 

 

##########

 

연습 : 

 

위에서 아래로

아래에서 위로

왼쪽에서 오른쪽으로

오른쪽에서 왼쪽으로 움직이는 코드를 만들어서 테스트 해본다.

 

Rect 값이 아닌 x, y 좌표를 가지고 변경하는 코드도 연습한다.

 

 

 

댓글목록 sfs

총 22 건 , 1 페이지
게시물 검색
Pygame - python GUI module 목록
번호 제목 글쓴이 조회 날짜
1 관리자 61391 02-21
2 관리자 34017 02-21
3 관리자 43900 02-21
4 관리자 47479 02-22
5 관리자 50398 02-22
열람중 관리자 44829 02-22
7 관리자 38350 02-22
8 관리자 39111 02-22
9 관리자 40646 02-23
10 관리자 47041 02-24
11 관리자 34472 02-25
12 관리자 37953 02-27
13 관리자 31203 03-05
14 관리자 38308 03-10
15 관리자 25880 03-10
16 관리자 31407 03-11
17 관리자 24645 03-11
18 관리자 26979 03-11
19 관리자 30457 03-11
20 관리자 33048 03-11
21 관리자 33910 04-05
22 관리자 26995 04-05
GNUBOARD_M
Copyright © JBMPA.com All rights reserved.