화살쏘는 게임만들기

코변·2022년 4월 25일
0

개발일지

목록 보기
7/41
import pygame
mouse_pos = pygame.mouse.get_pos()
radian = math.atan2((-mouse_pos[1] + arrow_y_pos ), (mouse_pos[0] - arrow_x_pos))
arrow_degree = int(radian * 180 / math.pi)

rotated_arrow = pygame.transform.rotate(arrow, arrow_degree)
new_arrow_pos = rotated_arrow.get_rect()
new_arrow_pos.center = (arrow_x_pos, arrow_y_pos)

마우스 포인터를 따라서 각도를 계산하고 화살이 그에 따라 옴직이는 게임화면을 만들었다. 어려울 줄은 알았지만 마우스 포인터와 캐릭터간의 역탄젠트 값을 구할 때 나의 인지와는 다르게 pygame에서의 y값은 아래로 갈수록 커지기 때문에 -를 붙여 로직을 완성할 수 있었다.

tm = 0.3
g = 9.8
arrow_pos[0] += (ux*tm)
arrow_pos[1] += ((uy*tm) + (g*tm**2)/2)
radian_now = math.atan2((- arrow_pos[1] + before_y)  , arrow_pos[0] - before_x)
degree_now = int(radian_now * 180 / math.pi)
rotated_arrow = pygame.transform.rotate(arrow,degree_now)

화살의 움직임을 계산한 로직이다. 중력가속도를 더해 포물선 운동을 만들었다. 또한, 다음 x,y 값과 지금 x,y값의 각도를 구해 화살촉의 방향을 운동방향으로 바꾸었다.

profile
내 것인 줄 알았으나 받은 모든 것이 선물이었다.

2개의 댓글

comment-user-thumbnail
2022년 4월 28일

파이썬 문법 배우고 처음 만들어보는 게임이라 힘드셨을수도 있을텐데 문제를 하나씩 찾아가면서 해결하는과정이 즐겁다고 생각하시니 천성 개발자신것 같습니다.!
포물선으로 화살표이동을 표현하는 것과 좌표값이 특정 원안에 포함되는것도 구현해보고 다양한 문제상황에서 해결과정을 찾아가는 모습이 멋졌습니다.
개발자는 이후에도 본인이 개발한 기술에 대해서 세미나나 발표할 기회가 많이 생기실텐데요 미리 캠프에서 발표하는 경험도 해보신점도 좋았고
처음하는 게임개발 이었을 테지만 적극적으로 문제해결에 임하는 모습이 인상깊었습니다. 파이썬 문법을 계속 익히시면서 시간나실때 틈틈히 코드를 리팩토링 해보시는것도 깔끔하게 코드를 작성하는 좋은 연습이 될것 같습니다.!
그리고 짧은기간내에 개발하느라 고생하셨습니다.!

1개의 답글