2014-03-01 2 views
0

내가 물어 보려는 질문은 사용 된 기술에 의존하지 않지만 HTML5를 사용하여 게임을 디자인하고 있습니다. 다음은 WIP입니다. http://lajili.com/fierysnake개체의 위치가 1 초 전, 30 gameloops 전에는

괜찮아 보이지만 큰 문제가 있습니다. 뱀의 수직 속도는 컴퓨터/스마트 폰의 힘입니다. 그리고 나는 그 속도를 정확하게 제어 할 필요가 있습니다. 그래서 뱀은 각 턴 사이에 90 °를 만들 수 있고, 그것을 터널의 속도와 동기화시킬 수 있습니다. 아시다시피 게임에서 게임 개체를 움직이면 "델타 시간", 즉 마지막 gameloop의 시간 경과를 사용하여 속도를 수정합니다. 그리고 그 머리에 잘 작동합니다. 그러나 두 번째 바디 파트는 "머리가 x 프레임 전인 곳"이기 때문에 이동할 머리에 의존합니다. x 프레임 전의 선두 위치는 x 프레임 전의 델타 시간에 의존한다. 그리고 세 번째 몸체 부분은 델타 시간 x * 2 프레임 전 등등에 달려 있습니다. 그러나 중요한 문제는 "x 프레임 전"을 계산하는 방법입니다. 3 초 전부터 60 대의 게임기 또는 90 대의 게임기가 컴퓨터의 컴퓨팅 성능에 따라 보았을 것입니다. 그게 정확하지 않을 수도 있기 때문에 "1 초 전 위치"와 "30 프레임 전"이 아니라고 말할 수있는 방법이 필요합니다. 그러나 그 방법이 보이지 않습니다.

답변

0

머리의 위치를 ​​초 몇 초 동안 유지해야합니다. 머리가 왼쪽이나 오른쪽으로 만 이동하는 경우 방향이 바뀌면 단일 속도로 새 속도를 기록하는 것으로 충분합니다. 다음 JSON 배열과 같은 것 :

[ 
    { 
     speed: 2.5, 
     time: 5.321 
    }, { 
     speed: -2.5, 
     time: 4.284 
    }, { 
     speed: 2.5, 
     time: 3.252 
    } 
    // ... 
] 

현재 위치와 현재 시간을 알고있는 경우 "머리"의 이전 위치를 모두 계산할 수 있지만 부동 소수점 숫자를 처리하기 때문에 작업이 더 쉽고 정확합니다. 방향 전환이 일어난 위치 :

[ 
    { 
     speed: 2.5, 
     time:  5.321, 
     position: 1.072 
    }, { 
     speed: -2.5, 
     time:  4.284, 
     position: 11.782 
    }, { 
     speed: 2.5, 
     time:  3.252, 
     position: 3.652 
    } 
    // ... 
] 

이 정보를 사용하면 잠시 동안 적절한 세그먼트를 찾아야 만 위치를 보간 할 수 있습니다. 일정 기간 동안 만 레코드를 보관해야하며 오래된 레코드 일 경우 레코드를 삭제하여 계속 증가하는 큐를 피할 수 있습니다.

+0

일부 친구의 도움으로 같은 결론을 내었습니다. 그렇습니다. 바로 그 해결책입니다. 질문의 링크에서 해결책을 볼 수 있습니다. 감사. http://lajili.com/fierysnake –

관련 문제