尝试制作一个xna游戏,用户需要点击该游戏才能停止一个栏。模拟就像我们在WWE PS3 / xbox游戏中看到的那样,放弃吧。
无论如何,我这样做的方式,是为了达到目的。但是,如果用户保持触摸,则触摸值会继续递增。
我想要的是,如果用户点击它,只会得1分。当他再次点击时,他将获得1分。目前正在发生的事情是,如果用户持有它,它会继续递增,类似于键盘(如果你按住按钮,按键继续按下)。
foreach (TouchLocation location in TouchPanel.GetState())
{
if (location.State == TouchLocationState.Moved)
{
touchPoints++;
break;
}
}
答案 0 :(得分:3)
从TouchLocationState.Moved更改为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;
答案 1 :(得分:0)
这是我的代码片段,说明我如何将每次触摸都视为个人价值。 system.diagnostics行是将在输出框中显示的测试。
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;
}
}