https://hyrule.tistory.com/111
*** 공부 방법 ***
1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처
hyrule.tistory.com
<시작 전 수정 사항>
Vector2.h
지난번에 사칙연산의 연산자 재정의를 할 때 값을 참조만 하는 연산자들에 대해 const 함수를 붙이지 않아서 수정하였음.
GameInfo.h
SAFE_DELETE 매크로와 SAFE_DELETE_ARRAY를 추가한다.
만약 p가 있으면 p를 삭제하는 매크로이다.

플레이어에게 총구를 달아주고, A, D버튼으로 총구를 좌우로 회전시키며
W, S 버튼으로는 총구 방향 앞/뒤로 이동하도록 구현해보자.
<사전 지식>

코사인 값과 사인 값을 조합하면, 총구가 향하는 방향(각도)를 구할 수 있다.
윈도우 좌표계를 기준으로,
만약 길이가 1인 총이 0도를 향하고 있다면, 총구 끝의 좌표는 (1, 0)이다.
그리고 이 때 , Cos(0) = 1, Sin(1) = 0이다.
총구가 오른쪽으로 90도 회전했을 때의 총구 끝의 좌표는(0, 1)이다.
이 때, Cos(90) = 0, Sin(90) = 1이다.
뭔가 느낌이 오지 않는가? 코사인과 사인 값이 지금 90도 단위의 좌표와 똑같다.
물론 중간 값도 좌표와 똑같이 나오는지 확인해볼 필요가 있겠지만, 우리는 지금 당장 90도 외의 각도를 구하는 방법을 모른다.
그래도 상관없다. 나머지값은 컴퓨터가 구해줄 것이므로 직접 구현해서 확인해보면 되기 때문이다.
우리는 지금 Cos(각도) 값이 x좌표를 구해주고, Sin(각도)값이 y좌표를 구해줄 것이라고 가정했다.
#include <math.h>
cosf(radian value);
sinf(radian value);
math.h에서 지원하는 삼각함수 값을 구해주는 함수.
우리가 기본적으로 각도를 재는 단위인 degree가 아니라, radian을 사용한다.
180 degree = PI(3.141592...) radian이다.
//수정해야하는 메소드
CPlayer::Update()
CPlayer::Render()
<로직>
- GameInfo 헤더에 math 헤더를 포함시킨다.
- CPlayer 객체는 총의 degree와 총의 길이, 그리고 총 끝의 위치를 가지고 있다.
- 좌/우 버튼을 누를 경우 총의 각도가 증가 또는 감소한다.
- 총의 degree를 radian으로 변환한 뒤 코사인값을 구하면 총이 향할 방향에 대한 벡터 x값을 알 수 있다.
마찬가지로 사인값으로는 벡터 y값을 알 수 있다. - 4번에서 구한 방향으로 총의 길이만큼 더해주면 총구 끝의 위치가 구해진다.
- CPlayer의 위치로부터 총구 끝까지 선을 그려준다.
- 총구 방향으로 전/후진하게 만들어준다.
<실행 결과>

'WIN32API FrameWork > 한단계씩 직접 구현' 카테고리의 다른 글
14. 씬 Scene 구조 짜기 (0) | 2022.05.18 |
---|---|
13. 참조 카운트(Reference Count), 공유 포인터(Shared Pointer) (0) | 2022.05.18 |
11. Player에게 총을 달아주고 입력을 받아 회전시키기 (0) | 2022.05.17 |
10. Vector2를 활용하여 캐릭터를 원하는 위치에 표시하기 (0) | 2022.05.17 |
09. Vector2 구조체 (0) | 2022.05.16 |
https://hyrule.tistory.com/111
*** 공부 방법 ***
1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처
hyrule.tistory.com
<시작 전 수정 사항>
Vector2.h
지난번에 사칙연산의 연산자 재정의를 할 때 값을 참조만 하는 연산자들에 대해 const 함수를 붙이지 않아서 수정하였음.
GameInfo.h
SAFE_DELETE 매크로와 SAFE_DELETE_ARRAY를 추가한다.
만약 p가 있으면 p를 삭제하는 매크로이다.

플레이어에게 총구를 달아주고, A, D버튼으로 총구를 좌우로 회전시키며
W, S 버튼으로는 총구 방향 앞/뒤로 이동하도록 구현해보자.
<사전 지식>

코사인 값과 사인 값을 조합하면, 총구가 향하는 방향(각도)를 구할 수 있다.
윈도우 좌표계를 기준으로,
만약 길이가 1인 총이 0도를 향하고 있다면, 총구 끝의 좌표는 (1, 0)이다.
그리고 이 때 , Cos(0) = 1, Sin(1) = 0이다.
총구가 오른쪽으로 90도 회전했을 때의 총구 끝의 좌표는(0, 1)이다.
이 때, Cos(90) = 0, Sin(90) = 1이다.
뭔가 느낌이 오지 않는가? 코사인과 사인 값이 지금 90도 단위의 좌표와 똑같다.
물론 중간 값도 좌표와 똑같이 나오는지 확인해볼 필요가 있겠지만, 우리는 지금 당장 90도 외의 각도를 구하는 방법을 모른다.
그래도 상관없다. 나머지값은 컴퓨터가 구해줄 것이므로 직접 구현해서 확인해보면 되기 때문이다.
우리는 지금 Cos(각도) 값이 x좌표를 구해주고, Sin(각도)값이 y좌표를 구해줄 것이라고 가정했다.
#include <math.h>
cosf(radian value);
sinf(radian value);
math.h에서 지원하는 삼각함수 값을 구해주는 함수.
우리가 기본적으로 각도를 재는 단위인 degree가 아니라, radian을 사용한다.
180 degree = PI(3.141592...) radian이다.
//수정해야하는 메소드
CPlayer::Update()
CPlayer::Render()
<로직>
- GameInfo 헤더에 math 헤더를 포함시킨다.
- CPlayer 객체는 총의 degree와 총의 길이, 그리고 총 끝의 위치를 가지고 있다.
- 좌/우 버튼을 누를 경우 총의 각도가 증가 또는 감소한다.
- 총의 degree를 radian으로 변환한 뒤 코사인값을 구하면 총이 향할 방향에 대한 벡터 x값을 알 수 있다.
마찬가지로 사인값으로는 벡터 y값을 알 수 있다. - 4번에서 구한 방향으로 총의 길이만큼 더해주면 총구 끝의 위치가 구해진다.
- CPlayer의 위치로부터 총구 끝까지 선을 그려준다.
- 총구 방향으로 전/후진하게 만들어준다.
<실행 결과>

'WIN32API FrameWork > 한단계씩 직접 구현' 카테고리의 다른 글
14. 씬 Scene 구조 짜기 (0) | 2022.05.18 |
---|---|
13. 참조 카운트(Reference Count), 공유 포인터(Shared Pointer) (0) | 2022.05.18 |
11. Player에게 총을 달아주고 입력을 받아 회전시키기 (0) | 2022.05.17 |
10. Vector2를 활용하여 캐릭터를 원하는 위치에 표시하기 (0) | 2022.05.17 |
09. Vector2 구조체 (0) | 2022.05.16 |