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 |