강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

kimexetrme0603님의 프로필 이미지
kimexetrme0603

작성한 질문수

저 좀 도와주세요 ㅠㅠ 어떻게 해야 하죠??

해결된 질문

작성

·

161

0

pygame를 통해서 캐릭터를 움직일 수 있는 게임을 만들어 보려 하는데

원근감을 이용해 위로 움직이면 캐릭터가 축소되고, 아래로 움직이면 캐릭터가 확대되어야 하는데

확대/축소가 될 때마다 캐릭터의 모습이 흐려지다가 사라지는 게 발생해요ㅠㅠ

어떻게 해야 할까요?

import pygame
import sys

WHITE=(255,255,255)
screenx=1280
screeny=720

def drawobject(obj,x,y):
    global screen
    screen.blit(obj,(x,y))

def initgame():
    global screen,fps,bg,char
    pygame.init()
    screen=pygame.display.set_mode((screenx,screeny))
    bg=pygame.image.load('리소스/background.png')
    char=pygame.image.load('리소스/sprite.png')
    pygame.display.set_caption('제목 뭐하지')
    fps=pygame.time.Clock()

def rungame():
    global screen,fps,bg,char

    charsize=char.get_rect().size
    charwidth=charsize[0]
    charheight=charsize[1]

    x=screenx/2
    y=screeny-charheight
    charX=0
    charY=0
    changecharsize=0

    
    

    done=False
    while not done:
        for event in pygame.event.get():
            if event.type in [pygame.QUIT]:
                pygame.quit()
                sys.exit()

            if event.type in [pygame.KEYDOWN]:
                if event.key==pygame.K_LEFT:
                    charX-=6
                elif event.key==pygame.K_RIGHT:
                    charX+=6
                elif event.key==pygame.K_UP:
                    charY-=4
                    changecharsize-=3
                elif event.key==pygame.K_DOWN:
                    charY+=4
                    changecharsize+=3
            if event.type in [pygame.KEYUP]:
                if event.key==pygame.K_LEFT or event.key==pygame.K_RIGHT:
                    charX=0
                elif event.key==pygame.K_UP or event.key==pygame.K_DOWN:
                    charY=0
                    changecharsize=0


        drawobject(bg,0,0)

        x+=charX
        if x<-120:
            x=-120
        elif x>screenx-charwidth+120:
            x=screenx-charwidth+120

        y+=charY
        if y<535-charheight:
            y=535-charheight
        elif y>720-charheight:
            y=720-charheight

        charwidth+=changecharsize
        if charwidth<180:
            charwidth=180
        elif charwidth>360:
            charwidth=360
        
        charheight+=changecharsize
        if charheight<180:
            charheight=180
        elif charheight>360:
            charheight=360

        char=pygame.transform.smoothscale(char,(charwidth,charheight))

        

        drawobject(char,x,y)

        pygame.display.update()

        fps.tick(60)


    pygame.quit()



initgame()
rungame()

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
kimexetrme0603님, pygame에서 캐릭터의 크기를 변경할 때마다 흐려지고 사라지는 문제는 이미지를 계속해서 변형시킬 때 발생할 수 있는 일이에요. 이미지를 확대/축소할 때마다 원본 이미지의 품질이 저하되는데, 이는 원본 이미지를 변형하여 크기를 조정할 때 발생하는 일종의 아티팩트 때문입니다.

문제를 해결하려면, 캐릭터의 원본 이미지를 보존하고 새로운 크기변경을 할 때마다 원본 이미지에서 시작하는 것이 중요합니다. 크기를 조정할 때마다 원본 이미지를 새로 로드하거나, 원본 이미지의 복사본을 사용하여 크기를 조정해야 합니다.

다음과 같은 접근 방식을 취하실 수 있습니다:

# 원본 캐릭터 이미지를 보존하는 변수를 추가합니다.
original_char = None

def initgame():
    global screen,fps,bg,char, original_char
    # 초기화 코드 ...
    char=pygame.image.load('리소스/sprite.png')
    original_char = char.copy()  # 원본 캐릭터 이미지의 복사본을 저장합니다.

# 게임 실행 함수 내에서, 이미지 크기를 조절할 때 원본 이미지를 사용합니다.
def rungame():
    global screen,fps,bg,char, original_char

    # 게임 실행 관련 코드 ...
        # 캐릭터 이미지의 크기를 조절합니다.
        if charwidth != original_char.get_width() or charheight != original_char.get_height():
            char = pygame.transform.smoothscale(original_char, (charwidth, charheight))

위 코드에서 original_char 변수는 캐릭터 이미지의 원본을 저장하며, 이미지 크기를 조절할 때 원본 이미지로부터 새로운 크기의 이미지를 생성합니다. 이렇게 하면 매번 이미지를 조절할 때 발생하는 품질 저하를 방지할 수 있습니다.

이 방식을 사용해서 캐릭터 크기를 조절하면 매번 높은 품질의 이미지를 유지할 수 있을 거예요. 코드 수정 후 정상적으로 기능하는지 확인해 보시기 바랍니다.

정상적으로 기능됩니다! ㅎㅎ 고맙습니다!

kimexetrme0603님의 프로필 이미지
kimexetrme0603

작성한 질문수

질문하기