Tag: arrow keys

C# – 俄罗斯方块克隆 – 无法阻止对箭头键组合做出正确响应

我正在使用Visual C#2005编写一个俄罗斯方块游戏。这是我设计的最广泛的程序。 我创建了一个形状类和一个块类来控制不同俄罗斯方块的位置,移动和显示。 我有每个形状的moveDown(),moveLeft()和moveRight()函数(和相应的canMoveDown(),canMoveLeft(),canMoveRight()布尔函数,validation它可以移动)。 这一切都很美妙。 我想使用向下,向右和向左箭头键让用户移动块,除了使用计时器使形状每隔很多毫秒自动下降一行。 我正在使用KeyDown事件处理程序来检查用户何时按下向下,向左和向右箭头键。 这不是那么难。 问题是我想允许对角线运动,我希望它能够顺利运行。 我已经尝试了一系列不同的方法来解决这个问题,并取得了不同程度的成功。 但我不能说得对…… 我最成功的方法是使用三个布尔变量来跟踪向下,向左和向右箭头键被按下的时间。 我会在KeyDown事件中将布尔值设置为true,并在KeyUp事件中将布尔值设置为false。 在KeyDown事件中,我还将告诉块如何移动,使用布尔变量来检查当前正在按下哪个组合。 除了一件事,它的效果非常好。 如果我按下其中一个箭头键并按住,然后按下第二个箭头键然后释放第二个键,该块将完全停止移动,而不是继续沿第一个箭头键的方向移动,而第一个箭头键尚未释放然而。 我认为这是因为第二个键触发了KeyDown事件,并且在释放时,KeyUp事件被触发,并且KeyDown事件完全停止触发,即使第一个键被触发。 我不能为我的生活找到一个满意的解决方案来解决这个问题。 任何帮助将不胜感激=)