Image를 SCREEN 안에서 벗어나지 않게 하기 > Pygame - python GUI module

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

회원로그인

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

Pygame - python GUI module

Image를 SCREEN 안에서 벗어나지 않게 하기

페이지정보

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

SNS 공유

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

내용

Image를 SCREEN 안에서 벗어나지 않게 하기

 

 

이전 강좌에서 Image를 키보드로 제어하는 것을 구현하였다. 하지만 여전히 Image는 SCREEN밖으로 벗어난다.

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

 

Image를 SCREEN안에서만 움직이게 하려면 Image의 좌표와 SCREEN의 사이즈를 비교하여 SCREEN 사이즈를 벗어나면 다시 안으로 들어오게 만드는 코드를 추가하면 된다.

 

아래의 그림을 보자.

 

2921044682_1582438920.5357.png

 

 

그림의 좌표를 참고로 화면밖으로 벗어나는 것을 방지하는 알고리즘을 만들어보자.

 

1) 왼쪽으로 벗어나는 것 방지

 

if player_Rect.left < 0:

    player_Rect.left = 0

 

 

2) 오른쪽으로 벗어나는 것 방지

 

if player_Rect.right > SCREEN_WIDTH:

    player_Rect.right = SCREEN_WIDTH

 

 

3) 위쪽으로 벗어나는 것 방지

 

if player_Rect.top < 0:

    player_Rect.top = 0

 

 

4) 아래쪽으로 벗어나는 것 방지

 

if player_Rect.bottom >  SCREEN_HEIGHT:

    player_Rect.bottom = SCREEN_HEIGHT

 

 

 

위의 코드를 https://www.jbmpa.com/pygame/7 강좌의 전체 코드에서

 

    player_Rect.x += dx

    player_Rect.y += dy

 

코드 아래에 추가하여 실행해 본다.

 

 

 

전체 코드

 

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

 

    # 왼쪽으로 벗어나는 것 방지

    if player_Rect.left < 0:
        player_Rect.left = 0

 

    # 오른쪽으로 벗어나는 것 방지

    if player_Rect.right > SCREEN_WIDTH:
        player_Rect.right = SCREEN_WIDTH

 

    # 위쪽으로 벗어나는 것 방지

    if player_Rect.top < 0:
        player_Rect.top = 0

 

    # 아래쪽으로 벗어나는 것 방지

    if player_Rect.bottom > SCREEN_HEIGHT:
        player_Rect.bottom = SCREEN_HEIGHT

 

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

    SCREEN.blit(player, player_Rect)

 

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

    pygame.display.flip()

 

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

    clock.tick(60)
 

 

 

실행 결과

2921044682_1582439431.942.png

 

2921044682_1582439440.0715.png

 

2921044682_1582439448.7767.png

 

2921044682_1582439456.0576.png

 

Image가 SCREEN의 벽에서 밖으로 더이상 이동하지 않는 것을 확인한다.

 

댓글목록 sfs

총 22 건 , 1 페이지
게시물 검색
Pygame - python GUI module 목록
번호 제목 글쓴이 조회 날짜
1 관리자 22848 04-05
2 관리자 29066 04-05
3 관리자 27676 03-11
4 관리자 25722 03-11
5 관리자 23497 03-11
6 관리자 20595 03-11
7 관리자 26610 03-11
8 관리자 21465 03-10
9 관리자 33451 03-10
10 관리자 27256 03-05
11 관리자 32657 02-27
12 관리자 29350 02-25
13 관리자 40294 02-24
14 관리자 34590 02-23
열람중 관리자 33524 02-22
16 관리자 32820 02-22
17 관리자 38227 02-22
18 관리자 43357 02-22
19 관리자 39270 02-22
20 관리자 36068 02-21
21 관리자 28938 02-21
22 관리자 52080 02-21
GNUBOARD_M
Copyright © JBMPA.com All rights reserved.