해결된 질문
작성
·
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
변수는 캐릭터 이미지의 원본을 저장하며, 이미지 크기를 조절할 때 원본 이미지로부터 새로운 크기의 이미지를 생성합니다. 이렇게 하면 매번 이미지를 조절할 때 발생하는 품질 저하를 방지할 수 있습니다.
이 방식을 사용해서 캐릭터 크기를 조절하면 매번 높은 품질의 이미지를 유지할 수 있을 거예요. 코드 수정 후 정상적으로 기능하는지 확인해 보시기 바랍니다.
정상적으로 기능됩니다! ㅎㅎ 고맙습니다!