너무 가까이 있습니다! XNA 게임 상태 관리 예제를 사용하여 here을 찾았으며 입력을 처리하는 방식을 수정하여 키를 지연 시키거나 입력 버퍼를 만들 수 있습니다.지연 키보드 입력 도움말
if (keyboardState.IsKeyDown(Keys.Left))
movement.X -= 50;
if (keyboardState.IsKeyDown(Keys.Right))
{
elapsedTime -= gameTime.ElapsedGameTime.TotalMilliseconds;
if (elapsedTime <= 0)
{
movement.X += 50;
elapsedTime = 10;
}
}
else
{
elapsedTime = 0;
}
: 나는 이중라는 elapsedTime을 선언하고 HandleInput 방법에서는 동일한 0으로
을 설정 한 GameplayScreen.cs에서
나는에 Key.Right 버튼을 눌러 변경 한 의사 코드 :
오른쪽 화살표 키를 누르지 않으면 elapsedTime을 0으로 설정합니다.이 키를 누르면 elapsedTime 자체가 마지막 프레임 이후의 밀리 초를 뺀 값이됩니다. 차이가 0 이하인 경우 개체 50을 이동 한 다음 elapsedTime을 10 (지연)으로 설정합니다.
키를 누르고있는 경우 else를 통해 elapsedTime을 절대로 0으로 설정해서는 안됩니다. 대신, elapsedTime이 성공적으로 확인 된 후 10으로 설정된 후 elapsedTime은 TotalMilliseconds에 의해 감 해지고 있기 때문에 더 낮아지고 낮아집니다. 0에 도달하면 검사를 다시 통과하고 객체를 한 번 더 이동합니다.
문제는 프레스 당 개체를 한 번만 움직이지만 눌러 놓으면 작동하지 않는다는 것입니다. 아무도 이것에 대한 지식의 팁/예/비트의 모든 종류를 제공 할 수 있습니까? 미리 감사드립니다, 그것은 나를 미치게했습니다. 이론적으로 나는 이것이 확실히 작동 할 것이라고 생각했다. 그리드의
설명
생각할 때 나는 블록이 이동하는 방법에 대한 당신의 생각. 스크린을 가로 질러 유동적으로 움직이는 대신 폭 (sorta jumping)이 다음 위치로 이동합니다. 내가 열쇠를 누르고 있으면 화면을 가로 질러 경주한다. 나는이 전체 프로세스를 느리게하여 키를 잡으면 X 점 밀리 초 지연을 만들고 점프하고 폭만큼 이동합니다.
EDIT : gameTime.ElapsedGameTime.TotalMilliseconds가 항상 0을 반환합니다. 나는 이유를 모른다.
해결 : gameTime.ElapsedGameTime.TotalMilliseconds가 0을 (를) 반환하고 있습니다. 다른 곳으로 이동했습니다.
둘 다 아닙니다. 나는 한 번에 한 픽셀 씩 움직이고 싶지 않은 50 픽셀 너비의 블록을 가지고있다. 나는 매번 너비를 움직이기를 원한다. 문제는 내가 아주 빨리 움직이는 키를 누르고있는 것입니다. 타이머를 통해 입력을 지연시켜야합니다. .05와 같은 것을 사용하면 작동하지 않습니다. =/ 옵션 1을 원하지 않습니다. 매번 키를 눌러야하기 때문입니다. 옵션 2는 내가 만든 첫 번째 문장 때문에 작동하지 않습니다. – Stradigos