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

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

회원로그인

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

Pygame - python GUI module

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

페이지정보

글쓴이 관리자 조회 29,676 조회 날짜 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 관리자 36195 02-21
2 관리자 22194 02-21
3 관리자 26772 02-21
4 관리자 28333 02-22
5 관리자 34350 02-22
열람중 관리자 29677 02-22
7 관리자 26525 02-22
8 관리자 26876 02-22
9 관리자 25823 02-23
10 관리자 30702 02-24
11 관리자 22089 02-25
12 관리자 25923 02-27
13 관리자 21543 03-05
14 관리자 26630 03-10
15 관리자 16792 03-10
16 관리자 20697 03-11
17 관리자 16705 03-11
18 관리자 19210 03-11
19 관리자 19522 03-11
20 관리자 20252 03-11
21 관리자 23160 04-05
22 관리자 17513 04-05
GNUBOARD_M
Copyright © JBMPA.com All rights reserved.