【发布时间】:2013-06-03 20:17:20
【问题描述】:
几个月前我刚开始学习编程,并决定做一个控制台蛇游戏。一切都很好,期待一件事。
如果我的蛇向上移动并且我按下向下箭头并按住它,我的蛇会停止并在我停止按下按钮后保持停止状态。
如果我的蛇向右移动并且我按右箭头的时间过长,我会失去控制一段时间(但蛇不会停止),也会发生同样的事情。它发生在各个方面(左,右,上,下)。
我尝试将 cki 与另一个 ConsoleKeyInfo 进行比较,但它们之间存在轻微延迟,但这没关系。如果我按住这个键,我的程序就会停留在那个位置并更新一个键。 (至少我认为这就是问题所在)
这是 Console.ReadKey 的“功能”还是有什么方法可以解决这个问题?
请记住,我刚刚开始,所以我还不知道高级的东西。
只要我不按住按键超过 1 秒,一切都会完美无缺。
public void LiikutaMato() //movesnake
{
if (Console.KeyAvailable)
{
ConsoleKeyInfo cki;
cki = Console.ReadKey(true); // <-- I believe this is where it gets stuck
}
【问题讨论】:
-
轮询率正在堆积 readkey 上的输入,您最终不得不等待它清除堆栈,然后才能接受任何新内容......只是猜测
-
当您按下并保持按下状态时,系统将(我认为)开始向控制台发送许多按键事件。如果您最终因这些原因而阻塞(例如,您的计算或控制台重绘所花费的时间比每次发送按键之间的时间要长)或使蛇停止(例如,因为您没有在按键的那一刻移动蛇按下以正常改变方向),这可能会导致您的问题。
-
提个建议……将这样的游戏编写为控制台应用程序有点矫枉过正,而且有点“变通办法”。您可能希望进一步磨练您的一般编码技能,并且由于您将使用 C#,因此请学习 XNA。
-
@Renan 我会说学习 MonoGame,因为 XNA 是 pretty much dead,除非您采取一些变通办法,否则 VS2012 甚至不可用。
-
您可能想使用不同的方法来读取键盘状态。例如:stackoverflow.com/questions/4351258/…
标签: c# console console.readkey