메뉴 클릭

버튼클래스를 수정해서 메뉴를 클릭하면 해당하는 씬으로 이동하도록 변경해보겠습니다.

버튼

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를 통해 반복문을 탈출해주도록 합니다.

좋은 웹페이지 즐겨찾기