-총알발사 후 삭제-

총알을 4방향으로 (WASD)발사해서, 경계외벽과 부딪히면, 삭제시켜보자.

[1]. 먼저 그 동안에 list인 총알을 push_back or emplace_back(Create_Bullet)해서 생성했는데, 여기다가 4방향으로 구분지어서 발사하게끔, 열거체 변수를 매개변수로 넣어 준다.

[2]. 따라서 총알의 부모클래스인 CObj에, 방향 열거체 변수를 멤버변수로 선언해주고, 자식 클래스Bullet의 Update에도, 분기문으로 각각 방향을 설정해주자

[3]. 그 전까지는, 예를 들어 플레이어 같은 경우에, 움직이고 나서 그 움직인 좌표값만큼 다시 출력해줘야 해서,

Key_Input()을 하고 나서, 부모클래스의 (__super::Update_Rect() ) 함수로 다시 재출력을 해준 느낌이 있었다. 근데, 이렇게 하면, 가끔 서순을 생각하게 되서, 충돌을 하고 나서 재출력을 할지, 출력을 하고나서 충돌을 할지, 암튼 이런 식의 함수 호출 순서를 생각하게 되는데.. 여기서 대안방법으로 Late_Update나 Late_Render 같은,

기본 Update()를 호출하고 나서, 결과를 실행 시킨 다음, 그 거를 바탕으로 다음 Update()를 호출한다는 개념이다.

[4]. 따라서 Bullet같은 경우에, Late_Update()에다가, 외벽충돌 조건 처리를 해서 bool 값으로 외벽의 좌표조건과 일치하면 총알이 사라진다는 bool 변수 m_bDead = true를 해주자. 그리고 Bullet의 Update()함수 내부에는, 그 bool 변수가 true라면, ‘오브젝트 사망’이라는 전처리기문 매크로 (1) 을 반환해준다.

[5]. MainGame클래스에서도 마찬가지 Update를 호출해왔던 것 마냥, Late_Update()도 호출을 다시 해주자.

[6]. 이제 오브젝트 사망이라는 전처리기문 매크로(1)일 때,

MainGame클래스의 Update함수에서 Bullet의 삭제처리를 진행해주면 되겠다.

[7]. MainGame에서 삭제관련 코드를 진행할 거라서, MainGame.h에다가, 총알클래스를 담은 STL LIST변수를 선언하고, 범위 기반 for문의 특성을 이용한,

auto& 를 사용해서 그 list변수를 참조해서, 마치 반복자 인 것처럼 사용해 코드식을 작성하자.

“총알이 충돌하면, bool변수를 통해 사망 이라는 1 값이 Bullet 클래스의 Update() int 반환형 함수의 반환값과 일치한다면, 삭제”

list.erase()를 하기 전에, Safe_Delete로 Bullet을 담은 list를 초기화 시켜주고, 진행하자.

Untitled

[8]. 그리고 결과는 다음과 같다.

Untitled