Object

2022. 12. 25. 20:40개인공부/Win32API

지금까지 강의에서 배운 내용으로 적을 움직이고 내가 미사일을 쏘는 방법에 대해서 프로그래밍했다.

 

 

코딩과정에서 내가 직접 설계를 해보면서 어려운점이 많이 발생했다  처음 설계한 나의 미사일은 Key 상태를 홀드로 해줘서 미사일이 프레임마다 나가는 방식으로 작동해서 TAP 상태로 바꿔서 한개씩 나가도록 설계를 했다. 하지만 사용자의 입력이 빠르면 빠르게 나간다는 방식을 사용하고 싶지 않아서 타임 매니저를 이용해서 코드를 작성했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
        AttackTime += fDT;
        if (0.25 <= AttackTime) { AttackTime = 0.25; }
 
 
    // 공격 방향
    if (0.25 <= AttackTime)
    {
 
        if (CKeyMgr::GetInst()->GetKeyState(KEY::W) == KEY_STATE::HOLD)
        {
            CreateMissile(KEY::W);
            AttackTime -= 0.25;
        }
        else if (CKeyMgr::GetInst()->GetKeyState(KEY::S) == KEY_STATE::HOLD)
        {
            CreateMissile(KEY::S);
            AttackTime -= 0.25;
        }
        else if (CKeyMgr::GetInst()->GetKeyState(KEY::A) == KEY_STATE::HOLD)
        {
            CreateMissile(KEY::A);
            AttackTime -= 0.25;
        }
        else if (CKeyMgr::GetInst()->GetKeyState(KEY::D) == KEY_STATE::HOLD)
        {
            CreateMissile(KEY::D);
            AttackTime -= 0.25;
        }
        
    }
cs

 

Update 에 구현하여 매 프레임 마다 +fDT를 해주어 공격 시간을 더해주는데  0.25값을 넘으면 공격이 발생하는 매커니즘이다 이런 방법으로 구현하면 시간이 점점 쌓여 attack time 이 무한히 증가할 수 있는데 이러면 차징 공격을 한것처럼 엄청나게 많은 공격이 나가기 때문에 attack time 의 최대치를 0.25로 설정하여 그러한 버그를 방지했다. 하지만 이방법은 공격 속도가 10초가 되면 처음 10초동안은 공격이 불가능하기때문에 처음에 attack time을 공격속도로 설정해주는 세밀함도 필요하다 

큰원이 Player 이고 네모가 적으로 설정하였고 적들이 일정시간마다 작은 원을 쏘는 방식을 구현하였는데 플레이어의 위치값을 입력받아 그 방향으로 공격하는 방식으로 설계하였다 이과정에서 처음에는 위치차이를 바로  vec로 사용하여 플레이어의 위치가 멀수록 빠른 공격이 날아왔다 이것을 백터의 정규화 함수를 이용해서 해결했다.  그리고 플레이어는 윈도우창 크기를 이상으로 이동하지 못하고  wasd로 마치 아이작처럼 이동과 공격키가 분리 되는 방식으로 설계를 완료했다.

 

'개인공부 > Win32API' 카테고리의 다른 글

bmp 파일 적용  (0) 2022.12.27
PathMgr  (0) 2022.12.26
KeyManager  (2) 2022.12.24
TimeManager  (0) 2022.12.23
공부 정리  (0) 2022.12.21