메뉴 클릭
버튼클래스를 수정해서 메뉴를 클릭하면 해당하는 씬으로 이동하도록 변경해보겠습니다.
버튼
void CMyButton::Late_Update_GameObject()
{
CGameObject::Update_Rect_GameObject();
POINT pt{};
GetCursorPos(&pt);
ScreenToClient(g_hWnd, &pt);
if (PtInRect(&m_tRect, pt))
{
if (CKey_Manager::Get_Instance()->Key_Up(KEY_LBUTTON))
{
if (!lstrcmp(m_pFrameKey, L"Start"))
{
CScene_Manager::Get_Instance()->Scene_Change(CScene_Manager::SCENE_STAGE);
return ;
}
else if (!lstrcmp(m_pFrameKey, L"Exit"))
DestroyWindow(g_hWnd);
}
m_iDrawID = 1;
}
else m_iDrawID = 0;
}
마이 버튼안의 Late_Update에서 작성합니다 우선 커서와의 충돌처리를 위해 커서의 위치를 받아오고 PtInRect를 통해 충돌 검사후 만들어준 키매니저로 키업이되었다면 해당하는 버튼의 프레임키에따라 이벤트를 수행해주면됩니다.
여기선 lstrcmp를 통해 문자열을 비교해주었습니다. Start의 경우 스테이지로 씬을 교체해주면됩니다.
그리고 이때 씬을 교체해줄때 씬체인지 함수안에서 버튼 클래스를 모두 지우기때문에 더이상 수행하지않고 리턴을 해주면됩니다.
그 후 바로 실행하면 런타임 에러가납니다 게임오브젝트매니저에서 업데이트를 실행할때 중간에 버튼이 모두 지워졌기때문에 없는 iter를 참조하기때문입니다.
void CGameObject_Manager::Update_GameObject_Manager()
{
for (int i = 0; i < OBJECT::END; ++i)
{
for (auto& iter = m_listGameObject[i].begin(); iter != m_listGameObject[i].end(); )
{
int iEvent = (*iter)->Update_GameObject();
if (OBJ_DEAD == iEvent)
{
Safe_Delete(*iter);
iter = m_listGameObject[i].erase(iter);
}
else
++iter;
}
for (auto& pObject : m_listGameObject[i])
{
pObject->Late_Update_GameObject();
if (m_listGameObject[i].empty())
break;
}
}
CCollision_Manager::Collision_RectEX(m_listGameObject[OBJECT::MONSTER], m_listGameObject[OBJECT::MOUSE]);
}
그래서 충돌 검사를 late_update에서 한것이고 late_update안에서도 만약 리스트가 비어있다면 break를 통해 반복문을 탈출해주도록 합니다.
Author And Source
이 문제에 관하여(메뉴 클릭), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jacod2/메뉴-클릭저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)