지금내가 투디겜을 만들고있는데말야
'물체' 라는 클래스가 있어
게임에 등장하는 플레이어,몬스터,지형 등등이 전부 이 물체라는 클래스를 상속받아서 이루어져있음
그런데 여기 '총알' 이라는 클래스가 있는데
이 총알이 모든 물체에관해서 충돌체크를해서 닿은녀석에게 데미지를주고 멀리 날아가게 만드려고해 (*단 지형은 데미지만 입고 안날아감*)
그래서 생각한방법이 두개가있는데 첫번째는
클래스 물체{
사적:
int 종족 ; // 플레이어 : 1, 몬스터 : 2, 지형 : 3 , ...
공적:
int 너누구() { return 종족; }
};
이런식으로 물체클래스에 종족구별 플레그를 하나줘서
물체* 충돌체크함수(...)
{
충돌검사한다 ...
return 충돌한 물체;
}
↑ 이런 함수가 있다치면
물체* obj = 충돌체크함수(총알);
if( obj->너누구() == 몬스터 || obj->너누구() == 플레이어)
체력닳게하고 날려버린다
else if( obj->너누구() == 지형 )
체력만 닳게한다
이런식으로 플레그로 구분한다음에 처리를 하는 방법이고
두번째방법은 플레그같은거 없이 그냥 물체를 상속받은 애들이니까
물체* obj = 충돌체크함수(총알);
if( dynamic_cast<플레이어*>(obj) != NULL || dynamic_cast<몬스터*>(obj) != NULL )
데미지주고 날려버린다
else if ( dynamic_cast<지형*>(obj) != NULL )
데미지만준다
이렇게 dynamic_cast로 누구인지 알아내서 처리하는방법이랑 두가지를 생각했는데
어떤방법이 더 나을까??
한줄요약 : c++에서 부모포인터로 가르키고있는 값이 어떤 자식놈인지 구별할때 dynamic_cast랑 플레그하나 두는거랑 뭐가 더 나음?
플래그
dynamic cast는 느려용
오오 그렇구나 플레그가 빠르다니 ㅋㅋ
그러면 다이나믹캐스트는 형변환을 꼭 해야되는경우에만 쓰는게 좋겠네?
아니 둘다 안해도 되고 물체 인터페이스를 구현한 몬스터, 지형, 플레이어 각 클래스 에서 총알 맞았을때 행동을 정의하면됨.