Image를 SCREEN 안에서 벗어나지 않게 하기
페이지정보
내용
Image를 SCREEN 안에서 벗어나지 않게 하기
이전 강좌에서 Image를 키보드로 제어하는 것을 구현하였다. 하지만 여전히 Image는 SCREEN밖으로 벗어난다.
참고 : https://www.jbmpa.com/pygame/7
Image를 SCREEN안에서만 움직이게 하려면 Image의 좌표와 SCREEN의 사이즈를 비교하여 SCREEN 사이즈를 벗어나면 다시 안으로 들어오게 만드는 코드를 추가하면 된다.
아래의 그림을 보자.
그림의 좌표를 참고로 화면밖으로 벗어나는 것을 방지하는 알고리즘을 만들어보자.
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
# pygame 초기화 pygame.init()
# 스크린 객체 저장
# FPS를 위한 Clock 생성
# 이미지 로딩 및 크기 변경 player = pygame.image.load("Player.png")
# 이미지의 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 # 이벤트 처리 if event.type == pygame.QUIT:
# 키가 눌렸을 때 if event.type == pygame.KEYDOWN: if event.key == pygame.K_UP:
# 키가 떼졌을 때 if event.key == pygame.K_UP:
# 스크린 배경색 칠하기 SCREEN.fill((255, 255, 255))
# 키에 의해 증가된 값을 이미지의 좌표에 적용시킨다. player_Rect.x += dx player_Rect.y += dy
# 왼쪽으로 벗어나는 것 방지 if player_Rect.left < 0:
# 오른쪽으로 벗어나는 것 방지 if player_Rect.right > SCREEN_WIDTH:
# 위쪽으로 벗어나는 것 방지 if player_Rect.top < 0:
# 아래쪽으로 벗어나는 것 방지 if player_Rect.bottom > SCREEN_HEIGHT:
# 스크린의 원하는 좌표에 이미지 복사하기, 좌표값은 Rect를 이용 SCREEN.blit(player, player_Rect)
# 작업한 스크린의 내용을 갱신하기 pygame.display.flip()
# 1초에 60번의 빈도로 순환하기 clock.tick(60) |
실행 결과
Image가 SCREEN의 벽에서 밖으로 더이상 이동하지 않는 것을 확인한다.