【发布时间】:2010-04-02 05:00:15
【问题描述】:
我正在 xna 中编写俄罗斯方块。我有一个带有方法rotateBlocks 的类。当我按下“向上”箭头键时。我希望当我按住按钮 1 秒或更长时间时,它会执行第一个 else if(快速旋转块)中的参数,现在什么都没有发生。我已经在课堂上全局声明了 oldState。如果我首先删除游戏时间检查,否则如果该块将快速旋转 imdietley。如果我尝试使用换行符单步执行代码,则分辨率会提高
public void RotateBlocks(loadBlock lb, KeyboardState newState, GameTime gameTime) { _elapsedSeconds2 += (float)gameTime.ElapsedGameTime.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;
}
}
【问题讨论】:
-
我有同样的问题,但在 Silverlight 应用程序中。这必须是面向操作系统的,因为我也在 winforms 中发现了这个问题
标签: c#