[Pygame] 07. 이미지 벽에 닿았을 때 튕기기

2023. 2. 5. 14:07·Minding's Programming/Pygame
728x90
반응형

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

https://www.youtube.com/watch?v=2qsaG_V_k9w&list=PLz2iXe7EqJOMp5LozvYa0qca9E4OBkevW&index=7 


import pygame

이전 강의에서 배웠던 마우스로 이미지를 움직일 때 사용했던 코드가 대부분이다.

마우스에 반응하는 코드를 지우고, 이미지가 자동으로 움직이며 벽에 튕기게 해보자.

pygame.init()

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

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

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

# 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
        
    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))
    pygame.display.update()
    
pygame.quit()

달라진 점은 speed_ball 이라는 속도(및 방향)변수가 생겼고, 이를 이용해 좌표값을 변하게 한다.

 

  • 이미지(ball)가 움직이게 하려면 좌표를 조정해주면 된다.
    • 시작 좌표는 왼쪽 가장자리 (0,0)
    • x좌표 : 이미지가 왼쪽으로 움직일때는 감소, 오른쪽으로 움직일때는 증가
    • y좌표 : 이미지가 위쪽으로 움직일때는 감소, 아래쪽으로 움직일때는 증가
  • 이미지가 벽에 튕기게 하려면 각 벽에 대한 조건을 만들어주어야 한다.
  • 배경의 가로 / 세로 길이를 그대로 적용할 수 없음 (pygame에서는 왼쪽 가장자리가 중심점이기 때문, 아래 사진 참고)
    • 화면의 위쪽 : y좌표값이 0보다 더 낮아지게 되면 화면 밖으로 벗어나므로 0 미만으로 넘어가서는 안됨.
    • 화면의 오른쪽 : x좌표값이 (배경의 가로길이 - 이미지의 가로길이) 값보다 더 증가해서는 안됨.
    • 화면의 아래쪽 : y좌표값이 (배경의 세로높이 - 이미지의 세로높이) 값보다 더 증가해서는 안됨.
    • 화면의 왼쪽 : x좌표값이 0보다 더 낮아져서는 안됨.

시연 영상

 

이번에도 출연해주신 정근우 선수

 

 

728x90

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

[Pygame] 09. 이미지(캐릭터) 객체끼리 충돌하기  (0) 2023.02.07
[Pygame] 08. 이미지 객체 추가 및 키보드로 움직이기  (0) 2023.02.06
[Pygame] 06. 키보드와 마우스로 이미지 움직이기  (0) 2023.02.04
[Pygame] 05. 이미지 사용하기  (0) 2023.02.01
[Pygame] 04. 도형 그리기  (0) 2023.01.31
'Minding's Programming/Pygame' 카테고리의 다른 글
  • [Pygame] 09. 이미지(캐릭터) 객체끼리 충돌하기
  • [Pygame] 08. 이미지 객체 추가 및 키보드로 움직이기
  • [Pygame] 06. 키보드와 마우스로 이미지 움직이기
  • [Pygame] 05. 이미지 사용하기
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
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minding
[Pygame] 07. 이미지 벽에 닿았을 때 튕기기
상단으로

티스토리툴바