我很亲密!我使用的XNA游戏状态管理示例发现here并试图修改它如何处理输入,所以我可以延迟键/创建输入缓冲区。延迟键盘输入帮助
在GameplayScreen.cs我声明了一个名为双和elapsedTime设置等于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应该永远不会被通过,否则设置为0。相反,在成功检查后,elapsedTime设置为10后,elapsedTime应该变得越来越低,因为它将被TotalMilliseconds减去。当它达到0时,它再次成功通过检查并再次移动对象。
的问题是,它每按移动对象一次,但如果你按住它不工作。任何人都可以提供任何类型的提示/示例/位知识对此?在此先感谢,它一直在让我疯狂。理论上我认为这肯定会奏效。
澄清
想到一个网格,当你对我多么希望块移动的思维。它不是在屏幕上流畅地移动,而是沿着它的宽度(按顺序跳跃)移动到下一个位置。如果我按住键,它会在屏幕上进行比赛。我想减慢整个过程,这样按住键可以在“跳跃”/移动它的宽度之间创建一个X毫秒的延迟。
编辑:原来gameTime.ElapsedGameTime.TotalMilliseconds将返回0 ...所有的时间。我不知道为什么。
解决:发现了gameTime.ElapsedGameTime.TotalMilliseconds返航0 ...搬到别的地方。
既不是。我有一个50像素宽的块,我不想一次移动一个像素......我希望它每次移动它的宽度。问题是,如果我只按住键,它移动得非常快。我需要通过计时器来延迟输入。使用类似.05的东西将无法正常工作=/ 我不想要选项1,因为这意味着我必须每次按下按键。而选项2因为我所做的第一个陈述而不起作用。 – Stradigos 2010-04-14 19:08:47