[Pygame] 08. 이미지 객체 추가 및 키보드로 움직이기

2023. 2. 6. 13:48·Minding's Programming/Pygame
728x90
반응형

이 글은 아래 영상을 참고했다.

https://www.youtube.com/watch?v=sltwgj_KLQw&list=PLz2iXe7EqJOMp5LozvYa0qca9E4OBkevW&index=8 


이전에 배웠던 내용들을 토대로 글러브 객체를 추가하고 키보드를 이용해 움직일 수 있도록 만들어보았다.

 

할 것

  • 이전 시간에 배웠던 이미지 튕기기에 글러브 추가하기
  • 글러브가 화면 밖으로 벗어나지 않도록하고, 양 옆으로만 움직일 수 있도록 제한하기
import pygame
pygame.init()

background = pygame.display.set_mode((550, 382)) # 배경 이미지에 맞추어 화면크기 설정함
pygame.display.set_caption('PYGAME_7')

# 이미지 파일 준비
image_bg = pygame.image.load('./image/fungo.png')
image_ball = pygame.image.load('./image/ball_small.png')
image_glove = pygame.image.load('./image/glove_small.png')

# 배경의 사이즈 가져오기
size_bg_width = background.get_size()[0]
size_bg_height = background.get_size()[1]

# glove의 사이즈 가져오기
size_glove_width = image_glove.get_rect().size[0]
size_glove_height = image_glove.get_rect().size[1]

# glove의 좌표값 설정하기
x_pos_glove = size_bg_width/2 - size_glove_width/2 # x좌표값 상 중앙
y_pos_glove = size_bg_height - size_glove_height # 맨 아래 (전체 높이에서 이미지 높이 만큼 뺀 값)

# 키보드 움직임에 의한 좌표 변수 (양 옆으로만 움직일 것이므로 x좌표만)
to_x = 0

# ball의 사이즈 가져오기 (가로, 세로)
size_ball_width = image_ball.get_rect().size[0]
size_ball_height = image_ball.get_rect().size[1]

# ball의 좌표값 설정하기
x_pos_ball = size_bg_width/2 - size_ball_width/2 # 가운데
y_pos_ball = 0 # 맨 위

# ball의 x,y 축 속도 변수 (좌표에 더해줄 목적)
x_speed_ball = 1
y_speed_ball = 1

play = True
while play:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            play = False
        if event.type == pygame.KEYDOWN: # 키보드가 눌렸을때
            if event.key == pygame.K_RIGHT:
                to_x = 1
            elif event.key == pygame.K_LEFT:
                to_x = -1
        if event.type == pygame.KEYUP: # 키보드를 뗐을때
            if event.key == pygame.K_RIGHT:
                to_x = 0
            elif event.key == pygame.K_LEFT:
                to_x = 0
    
    # glove가 화면 밖으로 벗어나지 않도록 제한
    if x_pos_glove < 0:
        x_pos_glove = 0
    elif x_pos_glove > size_bg_width - size_glove_width:
        x_pos_glove = size_bg_width - size_glove_width
    else:
        x_pos_glove += to_x
        
    x_pos_ball += x_speed_ball
    y_pos_ball += y_speed_ball
        
    # x좌표값을 제한하고 speed변수를 음수로 바꿔 방향 전환하기
    if x_pos_ball <= 0:
        x_speed_ball = -x_speed_ball
        x_pos_ball = 0
    elif x_pos_ball >= size_bg_width - size_ball_width:
        x_speed_ball = -x_speed_ball
        x_pos_ball = size_bg_width - size_ball_width
        
    if y_pos_ball <= 0:
        y_speed_ball = -y_speed_ball
        y_pos_ball = 0
    elif y_pos_ball >= size_bg_height-size_ball_height:
        y_speed_ball = -y_speed_ball
        y_pos_ball = size_bg_height-size_ball_height
            
    # 이미지 삽입 및 업데이트
    background.blit(image_bg, (0,0))
    background.blit(image_ball, (x_pos_ball, y_pos_ball))
    background.blit(image_glove, (x_pos_glove, y_pos_glove))
    pygame.display.update()
    
pygame.quit()

이전 코드들 복붙하고 살짝만 수정해주면 어려울게 없다.

화면 밖으로 벗어나지 않도록 좌표를 제한해주는 부분만 신경쓰면 충분히 구현 가능하다.

왼쪽 가장자리가 이미지, 배경 등등 모든 것의 중심좌표라는 것을 잊지말자!

 

시연 영상

 

 

728x90

'Minding's Programming > Pygame' 카테고리의 다른 글

[Pygame] 10. 점수 추가하기  (0) 2023.02.08
[Pygame] 09. 이미지(캐릭터) 객체끼리 충돌하기  (0) 2023.02.07
[Pygame] 07. 이미지 벽에 닿았을 때 튕기기  (0) 2023.02.05
[Pygame] 06. 키보드와 마우스로 이미지 움직이기  (0) 2023.02.04
[Pygame] 05. 이미지 사용하기  (0) 2023.02.01
'Minding's Programming/Pygame' 카테고리의 다른 글
  • [Pygame] 10. 점수 추가하기
  • [Pygame] 09. 이미지(캐릭터) 객체끼리 충돌하기
  • [Pygame] 07. 이미지 벽에 닿았을 때 튕기기
  • [Pygame] 06. 키보드와 마우스로 이미지 움직이기
Minding
Minding
  • Minding
    Today's Minding
    Minding
  • 전체
    오늘
    어제
    • 울고넘는 딥러닝 (278)
      • Minding's Baseball (57)
        • MLB Statcast (29)
        • 머신러닝으로 홈런왕 예측하기 (3)
        • 야구칼럼 (12)
        • 야구 규칙, 용어 (1)
        • 2022-23 질롱 코리아 (8)
        • 류현진 등판경기 (4)
      • Minding's Programming (185)
        • 프로그래머스 코딩테스트 (21)
        • Knowledge (44)
        • Numpy & Pandas (6)
        • Excel (3)
        • Git (1)
        • Pygame (11)
        • CV (3)
        • Tensorflow tutorial (4)
        • Kaggle and Dacon (4)
        • 에러 코드 (8)
        • FastAPI (8)
        • Airflow (29)
        • Crawling (6)
        • Django (14)
        • AWS (18)
        • Spark (5)
      • Minding's Reading (30)
        • 머신러닝 딥러닝에 필요한 기초 수학 with 파이.. (2)
        • 칼만필터는 어렵지 않아 (11)
        • 밑바닥부터 시작하는 딥러닝 (6)
        • 메이저리그 야구 통계학 2e (8)
        • 논문읽기 (2)
        • 빅데이터를 지탱하는 기술 (1)
      • Minding's Life (5)
        • 주식 (4)
        • 각종 소식 (1)
  • 블로그 메뉴

    • 홈
    • Baseball
    • Programming
    • Reading
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬
    mlb stats api
    질롱코리아
    넘파이
    Airflow
    FastAPI
    에어플로우
    pygame
    데이터분석
    KBO
    AWS
    메이저리그
    django python
    프로그래머스
    칼만필터는어렵지않아파이썬
    Python
    게임개발
    파이썬게임개발
    딥러닝
    KalmanFilter
    칼만필터는어렵지않아
    데이터 엔지니어
    머신러닝
    코딩테스트
    야구
    django
    칼만필터는어렵지않아python
    칼만필터
    파이게임
    MLB
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minding
[Pygame] 08. 이미지 객체 추가 및 키보드로 움직이기
상단으로

티스토리툴바