티스토리 뷰

반응형

 

 

현재 아이폰4랑 에뮬레이터랑 블루투스로 연결되어 멀티플레이중인 화면이다.

 

각 기기는 프레임마다 Tick이 1씩 증가한다. 그런데 당연하게도 에뮬레이터의 하드웨어성능이 더 좋아서 그런지 시간이 지남에 따라 Tick값이 많이 벌어진다. 화면상에선 500정도가 벌어졋는데, 이정도면 초당 60프레임 게임이므로 8초 이상이 서로 벌어진 상태이다.

 

이정도로 벌어지면 서로 협동하여 하는 게임에도 불구하고 다른 화면을 보고 게임을 진행하게 된다. 따라서 두 기기가 같은 화면을 볼 수 있도록 동기화 작업을 해주어야 한다.

 

지금 당장 생각난 방법은 기계1에서 주기적으로 자신의 Tick값을 기계2로 전송한다.
기계2는 이 Tick값을 받고, 자신의 Tick값과 비교해서 자신이 크면 그만한 Tick만큼 Sleep한다.

자신이 작을때는 비교 안하는 이유는 두기기가 둘다 상대방에게 Tick값을 전송하기 때문이다. 따라서 낮은쪽은 처리를 안해줘도 상대방 기기가 처리를 하게 되있다.

 

아직 구현을 해본건 아니지만 이 방법을 이용하면 어느정도 동기화가 될거라 생각된다.

 

 

FPS나 MMORPG등 여러 게임의 동기화 기법을 봣지만 내가 만들고 있는 게임에 적합한 동기화 기법이 없엇다.

 

MMORPG에서는 '데드레커닝' 이라는 기법이 쓰인다고 한다. 이 기법은 플레이어가 앞으로 가는 상태라면, 이동하면서 자신의 좌표를 전부다 서버로 전송하는게 아니라, 가는 상태만 전송하면 서버에서는 플레이어가 다른 동작을 보내오기 전까지 플레이어의 위치를 예상하고 처리한다. 보통 MMORPG는 마우스로 화면에 찍으면 그 위치로 가는 경우가 많은데, 한마디로 플레이어가 위치를 찍으면 그 서버는 플레이어가 그 위치로 간다고 가정하고 위치를 예상&계산하여 처리한다.

한 화면에 플레이어가 몇십명에서 몇백명인 MMORPG에서 서버부하를 줄이기 위한 적합한 방법인것 같다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함