스크롤

김주현·2021년 7월 30일
0

Win API

목록 보기
4/14

게임 화면을 구현할때 맵을 미리 그려놓고 받아온다면 어떤 방식으로 화면에 출력해줘야 할까요 만약 플레이어가 오른쪽으로 이동할경우 맵은 왼쪽으로 이동해줘야 현재 화면에 표시되고있는 바깥부분도 볼수있을겁니다 이를 스크롤을 통해 구현해봅니다.

스크롤

우선 저번 맵을 수정하고 저장했던 Edit에서 스크롤을 적용해보겠습니다.
스크롤이용해 맵의 좌표를 표시할때 실제맵에 그려진 라인들의 좌표를 수정해선 안됩니다.

그럴 경우 충돌이나 다른 부분에서는 실제 좌표를 통해 계산하기때문입니다.

그렇기때문에 순전히 표시되는 렌더부분에서만 현재 스크롤 된값을 더해주면됩니다 이 스크롤값을 계산하기위해 스크롤매니저를 사용합니다.

class CScroll_Manager
{
public:
	CScroll_Manager();
	~CScroll_Manager();
public:
	static int Get_ScrollX() { return m_iScrollX; }
	static int Get_scrollY() { return m_iScrollY; }

	static void  Set_ScrollX(int iScrollX) { m_iScrollX += iScrollX;  }
	static void  Set_ScrollY(int iScrollY) { m_iScrollY += iScrollY; }
private:
	static int m_iScrollX; 
	static int m_iScrollY; 

};

클래스 스크롤 매니저입니다. 스태틱 변수 static int m_iScrollX; 
static int m_iScrollY;를 통해 x,y의 스크롤 된값을 멤버 변수로 가지고있고 이값은 Set,Get해줄수있습니다.
(두 변수는 스태틱이기 때문에 CPP파일에서 초기화를 해주어야합니다.
int CScroll_Manager::m_iScrollX = 0; 
int CScroll_Manager::m_iScrollY = 0; )

다음 Edit프로젝트에는 현재 Line객체만 있으므로 Line의 렌더부분에서 스크롤매니저를통해 스크롤값을 구해와 라인의 좌표값에 더해주면됩니다. 마찬가지로 클라이언트 부분에선 플레이어에도 똑같이 값을 더해주면됩니다.

void CLine_Manager::Update_LineManager()
{
	POINT pt{}; 
	GetCursorPos(&pt); 
	ScreenToClient(g_hWnd, &pt);
	pt.x -= CScroll_Manager::Get_ScrollX(); 
	pt.y -= CScroll_Manager::Get_scrollY(); 
	if (CKey_Manager::Get_Instance()->Key_Down(KEY_LBUTTON))
	{
		m_listLine.emplace_back(CLine::Create(LINEINFO({ float(pt.x), float(pt.y) }, { float(pt.x), float(pt.y) })));
	}
	if (CKey_Manager::Get_Instance()->Key_Pressing(KEY_LBUTTON))
	{
		m_listLine.back()->Set_RightPos({ float(pt.x), float(pt.y) });
	}
	if (CKey_Manager::Get_Instance()->Key_Down(KEY_S))
	{
		SaveData(); 
	}
	if (CKey_Manager::Get_Instance()->Key_Down(KEY_L))
	{
		LoadData();
	}
	if (CKey_Manager::Get_Instance()->Key_Pressing(KEY_LEFT))
		CScroll_Manager::Set_ScrollX(5); 

	if (CKey_Manager::Get_Instance()->Key_Pressing(KEY_RIGHT))
		CScroll_Manager::Set_ScrollX(-5);
}
업데이터 매니저 부분입니다 달라진점은 커서값에서 현재 스크롤의 값을 빼준다는점 그래야 스크롤값이 더해진 진짜 게임상의 좌표를 알고 라인을 만들어서 넣어줄수있기 때문입니다.

그리고 왼쪽키와 오른쪽키를 통해 스크롤값을 조정해주었습니다.

만약 왼쪽키를 누른다면 스크롤X가 5씩 증가 할것이고 Line이 렌더될때 실제 좌표보다 5 커진값 즉 오른쪽으로 5만큼 이동할것입니다
여기서 헷갈린순있지만 천천히 생각해본다면 우리가 왼쪽 키를 눌렀을때 객체는 똑같이 왼쪽으로 따라오는게 아니라 오른쪽으로 이동해줘야 플레이어가 왼쪽으로 가는 느낌을 받는게 중요합니다.

Edit에서 스크롤을 연습해보았으니 Client에도 똑같이 스크롤 매니저를 추가해주고 Client와 Line의 렌더에도 똑같이 스크롤값을 더해주면 됩니다.

0개의 댓글

관련 채용 정보