메신저에는 xna에 테트리스를 쓰고 있습니다. rotateBlocks 메서드가있는 클래스가 있습니다. "Up"화살표 키를 누르면됩니다. 나는 그 버튼을 1 초 이상 누르고 있으면 첫 번째 else에서 인수를 실행한다. (블록을 빠르게 돌림) 현재 아무 일도 일어나지 않는다. 나는 클래스에서 전 세계적으로 oldState를 선언했다. 블록이 빠른 imedietley를 돌릴 경우 먼저 gametime 검사를 제거합니다. 난과 바꿈 코드를 단계별하려고하면 해상도 **** D까지1 초 지연의 C# Xna 키드 다운
공개 무효 RotateBlocks (loadBlock의 LB, KeyboardState newState, GameTime gameTime) { _elapsedSeconds2 + = (플로트) gameTime.ElapsedGameTime을 f를 얻는다. TotalSeconds;
if (lb._name.Equals("block1"))
{
if (newState.IsKeyDown(Keys.Up) && !oldState.IsKeyDown(Keys.Up))
{
// the player just pressed Up
if (_rotated)
{
lb._position[0].X -= 16;
lb._position[0].Y -= 16;
lb._position[2].X += 16;
lb._position[2].Y += 16;
lb._position[3].X += 32;
lb._position[3].Y += 32;
_rotated = false;
}
else if (!_rotated)
{
lb._position[0].X += 16;
lb._position[0].Y += 16;
lb._position[2].X -= 16;
lb._position[2].Y -= 16;
lb._position[3].X -= 32;
lb._position[3].Y -= 32;
_rotated = true;
}
}
if (newState.IsKeyDown(Keys.Up) && oldState.IsKeyDown(Keys.Up))
{
// the player is holding the key down
if (gameTime.ElapsedGameTime.TotalSeconds >=1)
{
if (_rotated)
{
lb._position[0].X -= 16;
lb._position[0].Y -= 16;
lb._position[2].X += 16;
lb._position[2].Y += 16;
lb._position[3].X += 32;
lb._position[3].Y += 32;
_rotated = false;
}
else if (!_rotated)
{
lb._position[0].X += 16;
lb._position[0].Y += 16;
lb._position[2].X -= 16;
lb._position[2].Y -= 16;
lb._position[3].X -= 32;
lb._position[3].Y -= 32;
_rotated = true;
}
_elapsedSeconds2 = 0;
}
}
같은 것을 할 필요가있다. 내가 winforms 에서이 문제를 발견했기 때문에 이것은 OS 지향적이어야합니다 – Rumplin