콘텐츠로 건너뛰기

블릿(blit)을 사용하는 방법을 쉽게 설명합니다

[

.blit()과 .flip()을 사용하여 2D Side-Scroller 게임 만들기

이 튜토리얼에서는 .blit()과 .flip()을 사용하여 새로 생성한 Surface를 화면에 표시하는 방법을 배우게 됩니다. .blit()은 Block Transfer의 약자로, 하나의 Surface의 내용을 다른 Surface로 복사하는 방법입니다. .blit()은 한 Surface에서 다른 Surface로만 복사할 수 있지만, 화면은 다른 Surface와 같은 것이기 때문에 문제가 되지 않습니다. surf를 화면에 그리는 방법은 다음과 같습니다:

# 이 줄은 "surf를 화면의 중앙에 그리기"라고 말합니다.
screen.blit(surf, (SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2))
pygame.display.flip()

이미지가 중앙에 맞지 않게 보이는 이유는 .blit()이 surf의 왼쪽 상단 모서리를 지정한 위치에 배치하기 때문입니다. surf를 중앙에 배치하려면 다음과 같이 코드를 업데이트해야합니다:

# surf의 중심을 디스플레이의 중앙에 놓습니다.
surf_center = (
(SCREEN_WIDTH - surf.get_width()) / 2,
(SCREEN_HEIGHT - surf.get_height()) / 2
)
# 새 좌표에서 surf를 그립니다.
screen.blit(surf, surf_center)
pygame.display.flip()

.blit()과 .flip()에 대한 자세한 내용은 pygame 문서에서 다음 리소스를 확인하세요:

이번 레슨에서는 .blit()과 .flip()을 사용하여 새로운 Surface를 화면에 표시할 수 있게 되었습니다. 이제 새로운 기능 두 가지를 추가할 차례입니다. 메인 게임 루프의 while 루프 내에서 다음과 같이 54번째 줄에서 시작합니다:

screen.blit(surf, (SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2))
pygame.display.flip()

블록 전송 방식으로 하나의 Surface를 다른 Surface 위에 블록 복사하는 것과 관련하여 변경 사항을 화면 자체에 그릴 수 있도록 .flip()을 사용합니다. 큰 틀에서 이전의 .flip() 이후에 그려진 모든 내용을 포함하여 화면 전체를 업데이트하는 것입니다. 지금은 두 가지 새로운 기능을 추가할 시간입니다.

메인 게임 루프의 while 루프 안에 있는 54번째 줄에서 screen.blit()을 사용합니다. surf라는 방금 생성한 객체를 화면에 그립니다. 그리고, SCREEN_WIDTH를 사용하지만 2로 나눕니다. SCREEN_HEIGHT도 마찬가지로 사용하여 2로 나누어 화면의 중앙에 배치합니다. 다시 말하면, 이는 튜플입니다.

그래서 이렇게 하나의 Surface를 다른 Surface 위에 블록 전송 한 후, 다음 단계는 pygame.display.flip()을 실행하여 업데이트합니다. 터미널에서 sky_dodge를 다시 실행하면 (python sky_dodge.py), 방금 만든 객체인 surf가 그려져 있는 것을 볼 수 있습니다. 그럼에도 불구하고 완전히 가운데에 있지 않나요? 이를 수정해 봅시다. 조금 오프셋이 있는데 이를 수정하기 위해 몇 줄을 추가합니다.

surf_center = (
(SCREEN_WIDTH - surf.get_width()) / 2,
(SCREEN_HEIGHT - surf.get_height()) / 2
)
screen.blit(surf, surf_center)
pygame.display.flip()

위와 같이 새로운 변수 surf_center를 만들고, SCREEN_WIDTH로 시작하지만 이번에는 Surface의 폭을 뺀 다음 .get_width()라는 메서드를 호출합니다. 그리고 해당 숫자를 2로 나누면 화면의 실제 중앙이 됩니다. 높이에 대해서도 동일하게 수행합니다. 따라서 SCREEN_HEIGHT에서 .get_height()를 빼주고 이 수를 2로 나눕니다. 그러면 새로운 튜플이 만들어지고 이를 61번째 줄에 사용할 수 있습니다. 그렇게하면 블록 복사가 이루어지고, surf를 surf_center를 통해 화면에 그립니다. 또한 업데이트하기 위해 .flip()을 실행합니다. 다시 한 번 실행해 보세요. 저장이 되었는지 확인하세요. 예시와 같이 실행해 보세요.

축하합니다! 섹션 2를 마치고 섹션 3으로 이동할 준비가 끝났습니다. 이제 스프라이트와 화면에 여러 가지를 표시하는 작업을 시작할 수 있는 기회가 주어집니다.