gpt4 book ai didi

c# - 延迟键盘输入帮助

转载 作者:太空宇宙 更新时间:2023-11-03 14:30:52 25 4
gpt4 key购买 nike

我很接近!我正在使用找到的 XNA 游戏状态管理示例 here并尝试修改它处理输入的方式,以便我可以延迟按键/创建输入缓冲区。

在 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 时,它再次成功通过检查并再次移动对象。

问题是,每次按下它都会移动一次对象,但如果您按住它则不起作用。任何人都可以为此提供任何类型的提示/示例/知识吗?提前致谢,这让我发疯了。从理论上讲,我认为这肯定会奏效。

澄清

当您考虑我希望方 block 如何移动时,请考虑网格。它不是在屏幕上流畅地移动,而是按宽度移动(有点跳跃)到下一个位置。如果我按住该键,它会在屏幕上快速移动。我想放慢整个过程,这样按住键会在它“跳跃”/按其宽度移动之间产生 X 毫秒的延迟。

编辑:原来 gameTime.ElapsedGameTime.TotalMilliseconds 一直返回 0...。我不知道为什么。

已解决:发现 gameTime.ElapsedGameTime.TotalMilliseconds 返回 0...将其移至其他位置。

最佳答案

发现 gameTime.ElapsedGameTime.TotalMilliseconds 返回 0...使用 Update 方法中的 GameTime 参数设置一个名为 GameT 的公共(public) double 变量。然后在 HandleInput 方法中使用 GameT 并返回有效时间。这不是最合法的方法,但目前有效。

关于c# - 延迟键盘输入帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2640033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com