【发布时间】:2011-02-08 01:29:36
【问题描述】:
我很近!我正在使用找到 here 的 XNA 游戏状态管理示例并尝试修改它处理输入的方式,以便我可以延迟键/创建输入缓冲区。
在 GameplayScreen.cs 中,我声明了一个名为 elapsedTime 的 double 并将其设置为 0。
在 HandleInput 方法中,我将 Key.Right 按钮按下更改为:
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 设置为 0。如果按下,elapsedTime 等于自身减去自上一帧以来的毫秒数。如果差值等于或小于 0,则移动对象 50,然后将 elapsedTime 设置为 10(延迟)。
如果按键被按住,则 elapsedTime 永远不应通过 else 设置为 0。相反,在成功检查后将 elapsedTime 设置为 10 后,elapsedTime 应该越来越低,因为它被 TotalMilliseconds 减去。当达到 0 时,它再次成功通过检查并再次移动对象。
问题是,每次按下它都会移动对象一次,但如果按住它就不起作用。任何人都可以为此提供任何类型的提示/示例/知识吗?提前谢谢,它让我发疯了。从理论上讲,我认为这肯定会奏效。
澄清
当您考虑我希望块如何移动时,请考虑网格。它不仅仅是在屏幕上流畅地移动,而是按其宽度(有点跳跃)移动到下一个位置。如果我按住这个键,它就会在屏幕上飞驰。我想放慢整个过程,以便按住键在它“跳跃”/移动它的宽度之间产生 X 毫秒的延迟。
编辑:结果 gameTime.ElapsedGameTime.TotalMilliseconds 一直在返回 0...。我不知道为什么。
已解决:发现 gameTime.ElapsedGameTime.TotalMilliseconds 返回 0...将其移至其他位置。
【问题讨论】: