스크롤락

김주현·2021년 8월 5일
0

Win API

목록 보기
11/14


현재 게임에선 플레이어가 이동할경우 스크롤이 계속증가하여 배경인 간디가 보이는곳까지 넘어갑니다.
여기서 스크롤매니저에서 스크롤 락 함수를 추가하여 스크롤이 타일이 깔아직 맵 바깥으로 나갈경우 더이상 이동하지 못하도록 막아보겠습니다.

스크롤 락

void CScroll_Manager::Scroll_Lock()
{
	if (0 < m_iScrollX)
		m_iScrollX = 0; 
	if (0 < m_iScrollY)
		m_iScrollY = 0; 

	if (WINCX - TILECX * TILEX > m_iScrollX)
		m_iScrollX = WINCX - TILECX * TILEX;
	if (WINCY - TILECY * TILEY > m_iScrollY)
		m_iScrollY = WINCY - TILECY * TILEY; 
	// x축 조건은 0과 -480 ; 
	// y축은 0보다 크면서 - 1320 

}

스크롤 매니저에 스크롤 락 함수를 선언 해줍니다 우선 지금 게임에선 맨좌측 상단 좌표가 (0,0)이므로 스크롤값이 0보다 커진다면 0으로 만들어줍니다

다음은 X축으로는 오른쪽 Y축으로는 아래쪽을 막아줘야하는데 여기선 현재 값을 정수값으로 넣어도 되지만 그렇다면 게임의 맵 크기가 수정될떄 마다 그 값또한 수정해줘여할것입니다.

그렇기때문에 스크롤값의 최솟값을 구해주면 X축의 경우 WINCX에서 타일의 X크기 * 타일의 X갯수를 곱해서 빼주면 최소값을 알수있고 만약 스크롤값이 이 값보다 더 작아진다면 초기화 해주면됩니다. Y축도 마찬가지입니다.

	CKey_Manager::Get_Instance()->Key_Update();
	CScene_Manager::Get_Instance()->Update_Scene_Manager();

	CScroll_Manager::Scroll_Lock();

다음은 MainApp에서 모든값을 Update를 돌린다음 스크롤을 막아주면됩니다.

플레이어 스크롤 동기화

하지만 아직 플레이어가 이동할때 플레이가 이동하지못하더라도 스크롤이 이동해버리는경우가 생기기때문에 이를 막아주기위해 플레이어가 이동키를 누를 때 무조건적으로 이동하는것이아닌 값을 동기화 해주어야합니다.

우선 플레이어의 Update부분에서 이동키를 입력받았을때 SetScroll해주던 부분을 모두 빼주고
스크롤 무브 함수를 추가해줍니다

void CPlayer::ScrollMove()
{
	int iScrollX = CScroll_Manager::Get_ScrollX(); 
	int iScrollY = CScroll_Manager::Get_ScrollY(); 
	if ((WINCX >> 1) < m_tInfo.fX + iScrollX + 100)
		CScroll_Manager::Set_ScrollX(-m_fSpeed); 
	if ((WINCX >> 1)  > m_tInfo.fX + iScrollX - 100)
		CScroll_Manager::Set_ScrollX(m_fSpeed);

	if ((WINCY >> 1)  < m_tInfo.fY + iScrollY + 100)
		CScroll_Manager::Set_ScrollY(-m_fSpeed);
	if ((WINCY >> 1) > m_tInfo.fY + iScrollY - 100)
		CScroll_Manager::Set_ScrollY(m_fSpeed);
}

스크롤 무브함수는 현재 맵의 중점값 과 플레이어의 좌표에 스크롤값을 더한값을 조정하여 스크롤값을 조정하여 줍니다 이렇게 하면 무조건 플레이와 스크롤이 같이 이동하는 것이아니라 플레이어가 중점에서 일정 부분(여기선 100) 을넘어갈경우부터 스크롤값이 변할것입니다.

0개의 댓글

관련 채용 정보