강의, 책/[DirectX, C++] 게임 매니악스 알고리즘 시리즈

[슈팅 알고리즘] Chapter 2. 탄환 (원형탄)

hye3193 2024. 4. 19. 16:38

2.10 원형탄

360도 전 방향으로 탄환을 발사하는 원형탄을 구현할 때에도 방향탄을 응용하면 된다

void InitCircleBullets(
    int n, // 탄환의 수
    float speed, // 탄환의 속도
    bool odd, // 홀수 패턴일 때: true
    float vx[], float vy[] // 원형탄의 속도 벡터
) {
    // 탄환과 탄환 사이의 각도를 계산하기
    float rad_step = M_PI * 2 / n;
    
    // 최초의 탄환의 각도를 계산하기
    // 홀수 패턴일 경우 0에서 rad_step/2만큼 회전해 줌
    float rad = odd ? rad_step / 2 : 0;
    
    // speed의 속도로 각도 rad 방향으로 날아가는 탄환의 속도 벡터 구하기
    for (int i = 0; i < n; i++, rad += rad_step) {
        vx[i] = cos(rad) * speed;
        vy[i] = sin(rad) * speed;
    }
}

방향탄을 이용해서 처음 시작 위치에서 rad_step 만큼 회전해가며 탄환을 발사해 준다