Game Development, 게임개발/게임 수학,물리

게임 물리 - 화면스크롤

게임이 더 좋아 2021. 8. 21. 15:49
반응형
728x170

 

수면마취가 되어서 어디론가 이동한 후

깨어 창 밖을 바라보니 산이 뒤로 이동하고 있다.

과연 그럴까?

 

즉, 우리는 관찰만으로는 내가 운동하는지 내가 관측하는 물체가 운동하는지 알 수 없다.

 

그래서 말하려는 것이 무엇이냐?

배경을 움직여보기로 했다.

 


 

배경을 맵칩이 아니라 한 장을 밀면서 표현하는 방법은 2D게임에 정말 많이 쓰인다.

즉, 유저가 보는 카메라가 배경에 따라 움직이거나 배경이 카메라를 기준으로 움직여야 한다는 것을 말한다.

카메라를 고정하든.. 배경을 고정하든 맘대로 하자.

(현실에서는 배경이 고정된 것을 참고)

 

배경도 물체랑 비슷하게 움직이게 하면 된다.

 

bg.x = VIEW_WIDTH / 2.0f - camera.x;

 

위와 같이 배경이미지의 좌표를 카메라를 이동시켜 구해도 되고 그 반대도 괜찮다.

뭐든 괜찮다.

 

 

1. 매 프레임마다 움직임 체크

2. 배경이 끝나면 움직이지 못하게 체크

2-1. 배경이 끝나면 해당 배경의 맨 앞을 맨 뒤로 당기든, 맨 뒤를 맨 앞으로 당겨서 무한 배경 생성

**그래서 해당 배경의 앞 뒤로 같은 배경을 복사해서 넣기도 한다.

 

뭐 위와 같이 할 수 있다.

 

물체의 운동과 다른 것은

** 카메라의 크기에 대해 신경써야하고 배경의 원점이 어디에 있는지 파악을 해야 한다는 것이다.

 

또한 한 장의 배경이 아닌 많은 레이어를 갖게 할 수 있다.

이는 나중에 원근법 측면에서 적용이 가능하며 이는 각 레이어의 속도 비에 따라 결정된다.

**멀리 있는 것은 느리게, 가까이 있는 것은 빠르게 움직이는 원리다.

 

나중에 더 알아보자

 

2D 스크롤 중

제일 유명한 게임은 소닉이 아닐까싶다.

사실.. 마리오도 있지만 다 알잖아ㅎ

 

 

나만 해본 건 아니겠지..?

 

아무튼 다중 스크롤을 구현할 때에는 자연스럽게 보이는 것을 중점에 두고

기존 레이어와의 속도를 고려하면 될 것이다.

 


 

하지만 여기서 소닉이란 게임에서는

소닉이 움직이지 않으면 배경도 움직이지 않는다.

 

 

즉, 캐릭터에 따라 배경이 움직이게 만들었다.

 

캐릭터의 움직임과 배경을 연동시킨 것이다.

사실 게임에서는 이것이 더 많다.

 

여기서도 마찬가지로 배경이 끝난다면 캐릭터가 진행하더라도 배경은 움직이지 않는 예외처리도 해주어야 한다.

코드로 설명할 수 있지만 우선 말로 하겠다.

 

카메라의 원점 + 너비의 반이 배경 끝보다 작거나 같아야 오른쪽 경계를 벗어나지 않을 것이고

카메라의 원점 - 너비의 반이 배경 시작보다 크거나 같아야 왼쪽 경계를 벗어나지 않을 것이다.

우선 카메라는 캐릭터의 위치를 따라가게 만들고 만약 한계에 닿는다면

캐릭터의 위치가 아닌 카메라의 위치를 고정시켜주는 것이 필요하다.

 


 

 

하지만 캐릭터와 카메라가 하나가 되는 것은 뭔가 이상하다.

하나 같기는 한데... 메이플 스토리를 예로 들어볼까?

 

 

물론 카메라가 캐릭터를 따라가는 것은 맞다.

근데.. 어느 정도의 이동에서는 화면이 움직이지 않고

어느 정도를 넘어서면 그제서야 움직이기 시작한다.

 

이것은 어떻게 구현할까??

 


 

오프셋을 주어서 구현이 가능하다.

즉, 화면 중앙에서부터 양쪽으로 임의로 오프셋을 주어 그 경계를 벗어날 경우 카메라를 이동하는 방식으로 한다.

이렇게 하는 이유는.. 편의성이다. 

카메라와 캐릭터가 계속 붙어다니면 플레이가 너무 힘들다.

특히 점프했을 때.. 땅에 뭐가 있는지 안 보이는 경우가 있다.

 

이 구현 또한 경계에 닿는 것과 비슷하게 구현하면 된다.

카메라의 위치는 캐릭터가 화면에서 일정 범위 이상 벗어났을 때 움직이게 하면 된다. 

 

카메라 원점 < 캐릭터 위치 - 오프셋 이라면

카메라를 움직여줘야 한다는 뜻이다.

 

 

 

728x90
반응형
그리드형