2010-07-11 2 views
3

차례를 기반으로하는 게임을 구현할 때 두면이 있고 각면에 여러 개의 단위가 있습니다. 각 특정 순간에 하나의 단위 만 보드에서 이동할 수 있습니다.시간 지연 및 모델보기 컨트롤러

한 번에 하나의 유닛 만 움직일 수 있기 때문에 어디로 가야할지 생각한 후에 시뮬레이션과 관련하여 즉시 텔레포트 할 수 있지만 게임을하면 유닛이 움직이는 것을보고 싶을 것입니다 누가 이사했는지, 어디로 갔는지 알고 있습니다.

문제는 모델에 이동 알고리즘 (예 : 2 초 사이에 보간)을 넣은 다음 이동 위치를 알지 못해도보기가 단위를 보일 것입니다. 유닛이 원하는만큼 움직이는 것을 보여 주어야한다는 견해를 알립니다.

두 번째 방법을 사용하는 경우 시뮬레이션이 너무 멀리 지나가는 것을 어떻게 방지 할 것인가? 이동이 끝난 후 시뮬레이션을 다시 시작하라는 명령을 내릴 것입니까?

미리 감사드립니다. Xtapodi.

답변

2

아, 또 다른 예는 MVC가 원래 실시간 그래픽 용으로 설계되지 않았 음을 상기시켜줍니다. ;)

모델의 현재 위치와 이전 위치를 저장합니다. 개체가 움직이면 현재 위치가 이전 위치로 복사되고 새 위치가 현재 위치로 복사되며 모델이 변경된보기로 알림이 전송됩니다. 그러면 뷰는 이전 위치와 새 위치 사이를 보간 할 수 있습니다. 모델에 저장된 추가 데이터 없이도 특정보기 설정을 기반으로 보간 속도를 높이거나 낮추거나 보간을 완전히 제거 할 수 있습니다.

대신 현재 위치와 이전 위치를 저장하는 대신 각 단위로 마지막 이동을 저장할 수 있으며 이동 자체에 이전 위치가 포함됩니다. 이동에 대한 추가 정보를 저장해야하는 경우이 방법이 더 다양 할 수 있습니다.

+0

감사합니다 Kylotan. 네, 제가 두 번째 제안을 할 것이라고 생각합니다. 그래서 저는 모델과 뷰를 모두 직접 구현하는 경우 모션을 뷰에 완전히두고 모델을 단순하게 유지하도록 선택할 것이라고 생각합니까? – Xtapodi

+0

예. 게임 규칙의 논리적 인 움직임은 중간 동작이없는 한 장소에서 다른 장소로 이동하기 때문에 모델에 저장할 수 있습니다. 이러한 장소 간의 물리적 이동은 단지 프리젠 테이션의 세부 사항입니다. 모델에 넣을 내용과보기에 넣을 내용에 대해 의심이가는 경우 메일 기반 게임 또는 텍스트 기반 게임으로 전환하는 방법을 스스로에게 물어보십시오. – Kylotan

+0

내 사고 훈련에 도움이 된 Kylotan에 감사드립니다. :) – Xtapodi

0

원하는 것은 단위 이미지를 각 프레임으로 이동시키는 것입니다. 각 프레임의 이미지 이동 거리는 보간법과 비슷합니다.

unitsPerSecond = totalUnits/(framesPerSecond * totalSeconds)

I 2 초 위치 (60)에 위치 0에서 이미지를 이동하려는 내 프레임 속도가 30 인 경우에 따라서, I (60) 프레임 (60) 단위로 이동해야 따라서 각 속도계는 1 프레임이므로 이미지 1 단위를 이동합니다. 유닛을 움직이면 목적지까지 이동하게됩니다. 단순히 내 위치를 목적지로 설정하면됩니다.

+0

롭 엘리엇 (Rob Elliott)에게 감사드립니다. 문제는 보간하는 방법이 아니며 최종적으로 코렌트 위치에 있는지 확인하는 것이 아닙니다. 문제는 보간법이 모델 또는 뷰에 있고, 모델과 뷰 사이의 결과 시간 동기화 문제가 나중에 발생하는 경우입니다. – Xtapodi