WinAPI 27 Collider(3)

CJB_ny·2022년 9월 8일
0

WinAPI

목록 보기
26/79
post-thumbnail

이런 탄막 슈팅게임은 보통 충돌체의 크기가 저만하다.

그래서

이런게임 보면은 틈 사이에 막 들어가서 아슬아슬 하게 피한다.

물체들간에 충돌을 판정할 대 그룹간에 충돌로 지정을 할 것이다.

물체가 100개가 있다고 가정을 하면은

서로가 서로를 싹다 리그전 처럼 계산을 할 것이다.

-> 검사량 횟수가 엄청나게 많아진다.

그룹을 나누어서 충돌을 판정할 것이다.

그래서 충돌검사를 해주는 녀석도 만들 것이다.

DT 흐름

먼저 물체들의 변경점이라던지 그런게 update에서 변경이 되고

그다음에 finalUpdate로 충돌체의 위치도 변경이 된다.

이게 한 DT안에서 벌어진 일이다. (한 프레임동안 움직이는게 종료가 됨)

이제 화면에 그릴 일만 남았다.

그래서 이번 프레임에 update를 하고나서 '충돌검사'를 해주는 것이다.

새롭게 충돌하는애, 계속 충돌중인에, 충돌에서 벗어난애

이렇게 알림처리를 해주어야

이번 프레임에 (네모 박스) 최종 업데이트가 다 끝났다고 볼 수 있다.

ColliderManager

ColiiderManager에 update를 구현해놓고

SceneManager의 update가 끝나면은 이제 ColliderManager의 update를 호출 해야한다.

그리고 어떤 그룹과 어떤 그룹끼리 충돌을 할 것인지를 해당 씬의 Enter부분에서 정해주는 것이다.

이렇게 이러이러한 그룹 충돌할 것이라 정해준다.

그 다음 ColliderManager의 update가 돌면서 두 그룹의 충돌 판정이 진행이 될 것이다.

이런식으로 ㄱㄱ.

충돌 어떻게 할 것인가?

표를 만들 것이다. 0, 1번 그룹 충돌체크 함.

여기 체크 되어있으면? 이것도 1, 0번 충돌 체크 한다. 라는 말 이다.

이거는?? => 같은 그룹끼리 체크이다.

몬스터들끼리 곂치치 않게 하기 위해서

나랑 나를 충돌시키는 경우를 제외하고는 다 말이 된다.

비트 연산자

이 절반은 필요 없다.

그리고 체크 표를 비트연산자로 표시하겠다.

0~31 까지 4바이트 이다.

이게 32개 필요하다.

이런식으로 멤버 배열 들고있고

Reset에서는

memset : 내가 지정한 주소를 바이트 단위로 다 셋팅 하는 함수이다. 이런식으로 하면된다.

CheckGroup

우리가 지정한 그룹 두개를 알려주면

이렇게 어딘가의 비트를 체크를 해주어야한다. (1로 켜준다)

업로드중..

대칭 구조라 이부분만 생각하면된다.

4번 7번 그룹 체크 해달라고하면은 누가 행이고 열인가?

더 작은 수가 행이 되어야한다.

업로드중..

더 큰 수가 행이 되어버리면 사용하지 않는 페이지 부분이 마킹이 된다.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글