나는 아주 좋은 것처럼 보이는 HTML5 3D fps와 유사한 엔진을 개발하고 있습니다. 그러나 이것은 3D를 만들기위한 최악의 언어 선택 중 하나 일 수 있으므로 때로 눈에 띄는 지연이 있습니다.게임 프로그래밍 : 움직임 지연 (점프) 제거
WASD가 렌더링 속도와 무관하게 프로그램 된 경우가 있으므로 때로는 상당히 엉망이지만 다른 시간은 허용되는 30+ fps (물론 CPU에 따라 다름)로 작업하고 있습니다.
내 마음을 감쌀 수없는 유일한 점프는 점프입니다. 현재 점프는 낙하 변수 (중력은 항상 음수이고 충돌 감지로 수정 됨)에 양수 상수를 추가 한 다음 상수를 뺍니다. 이것은 새로운 프레임이 렌더링 될 때마다 호출됩니다. fps가 낮아지면 나는 달에있는 것처럼 느낍니다. 나는 slow-mo effect에 jerkiness를 선호한다.
이동 (현재 프레임과 마지막 프레임 사이의 시간 계산)과 같은 방법을 사용하면 공제 된 변수가 너무 커지고 때때로 점프 꼭지점이 변경됩니다 (높은 fps에 비해 값의 절반까지). 점프 높이가 항상 같아야하므로 용납 될 수 없습니다.
이// when clicked on spacebar:
if(spacebar)
{
// this defines jumping apex
jump = 0.5
}
// constant added to y (vertical position) later in the code
cy += jump;
// terminal velocity = -2
if(jump > -2)
{
// gravity (apex multiple to get maximum height)
jump -= 0.05;
}
if(collision_with_floor)
{
// stop falling
cy = 0;
if(jump < 0)
{
jump = 0;
}
}
player.position.y += cy;
지금 시간에 따라 점프와 (위의 코드에서 대체) :
// terminal velocity = -2
if(jump > -2)
{
// gravity, 0.4 is an arbitrary constant
jump -= (now - last_frame)*0.4;
last_frame = now;
}
여기
는 (하나의 렌더링 루틴 동안 호출) 문제를 이해하는 데 도움이되는 몇 가지 의사 코드입니다 여기에 무슨 일이 벌어지고 있는지에 대한 이미지가 있습니다.파란색 점은 프레임 렌더링을 나타냅니다.
저는 이것이 점핑 루틴을 프로그래밍하는 올바른 방법인지 잘 모르겠습니다. 기본적으로 예리함과 일정한 점프 높이가 부드러움과 슬로우 모션 효과보다 낫습니다.
플레이어가 꼭지점에 도달했을 때 주황색 선을 점선으로 범프하면 두 번째 작은 점프와 같이 매우 번쩍 거림이되는 것은 이상적이지 않습니다. 낮은 fps에서는 눈에 띄지 않지만 높은 경우에는 매우 짜증납니다. – Solenoid
이상한 FPS가 더 나쁘다는 것이 이상합니다. 이상적인 꼭지점과 실제 꼭지점 사이의 거리가 낮은 FPS보다 작을 것이라고 생각했을 것입니다. 어쩌면 갑작스러운 충돌 대신 플레이어가 점선에 미치지 못하면 현재 'cy'를 긍정적으로 유지하여 플레이어가 도달 할 때까지 위쪽으로 계속 움직일 수 있습니다. –
또한 재미있는 질문이지만, http://gamedev.stackexchange.com/에서 그 이상의 관심을 끌 수 있습니다. –