尝试制作一个xna游戏,用户需要点击以阻止柱线下降。模拟就像我们在WWE PS3/xbox游戏中看到的放弃栏。
无论如何,我这样做的方式是达到目的的。但是,如果用户按住触摸,触摸值将不断递增。
我想要的是,如果用户点击它,只会得到 1 分。当他再次点击时,他将多获得 1 分。目前正在发生的事情是,如果用户按住它,它会不断递增,有点像在键盘上(如果你按住一个按钮,按键会继续)。
foreach (TouchLocation location in TouchPanel.GetState())
{
if (location.State == TouchLocationState.Moved)
{
touchPoints++;
break;
}
}
更改为 TouchLocationState.已移至 TouchLocationState.Pressed。这应该只发生在每次新的触摸中。
foreach (TouchLocation location in TouchPanel.GetState())
{
TouchLocation prevLocation;
bool prevLocationAvailable = location.TryGetPreviousLocation(out prevLocation);
if (location.State == TouchLocationState.Pressed && prevLocation.State != TouchLocationState.Pressed)
{
touchPoints++;
break;
}
}
对于将来,如果您正在进行键盘输入并希望每次按键盘增加值,但如果玩家按住空格,则忽略该值,则只需存储键盘的先前状态。然后,比较当前键盘状态是否按下了键,而上一个键盘状态是否按下了键。
(实际上并没有在编译器中编码,因此以下内容可能存在一些代码问题)
KeyboardState currentKeyboardState = Keyboard.GetState();
if (currentKeyboardState.IsKeyDown(Keys.Space) && !previousKeyboardState.IsKeyDown(Keys.Space) {
//Do whatever it is you want to do with the press of the space key
}
previousKeyboardState = currentKeyboardState;
这是我的代码片段,说明我如何将每次触摸都变成一个单独的值。系统诊断行是将在输出框中显示的测试。
TouchCollection touch = TouchPanel.GetState();
foreach (TouchLocation touchLocation in touch)
{
if (touchLocation.State == TouchLocationState.Pressed)
{
base.InputPointX = touchLocation.Position.X;
base.InputPointY = touchLocation.Position.Y;
System.Diagnostics.Debug.WriteLine("X: " + base.InputPointX +
", Y: " + base.InputPointY);
base.Update();
return true;
}
}