我遇到触控/多点触控输入问题。
我想绘制一个尺寸为100x100的小矩形,无论用户在哪里按下(任务完成),但我也希望它们在用户移动手指时移动(这不会发生在atm)。
除了不动的部分之外,我的行为也变得奇怪了,假设我先用拇指触摸,然后用中指触摸。每个手指都会出现两个立方体,但是如果我移开手指,我首先放置(拇指在这个场景中)我放在第二个(中指)的手指下方的立方体将消失,而我拇指所在的那个立方体仍然会在那里。我想这个问题一旦我有正确的更新就会自动解决。
这是Draw和Update片段。任何帮助表示赞赏:
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
TouchCollection touchLocations = TouchPanel.GetState();
i = 0;
foreach (TouchLocation touchLocation in touchLocations)
{
if (touchLocation.State == TouchLocationState.Pressed)
{
pos[i] = touchLocation.Position;
}
i++;
}
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
for (j = 0; j < i; j++)
{
spriteBatch.Draw(whiteRectangle, new Rectangle(((int)pos[j].X - 50), ((int)pos[j].Y - 50), 100, 100), Color.Chocolate);
}
spriteBatch.End();
base.Draw(gameTime);
}
答案 0 :(得分:0)
我建议您使用词典,假设您想要将触摸位置与其位置相关联。关键应该是TouchLocation.Id
对于给定的交互,TouchLocation.Id将保持不变。无法保证TouchLocations的顺序从一帧到另一帧是相同的,因此您必须使用它们的ID,而不是它们在集合中出现的顺序。
答案 1 :(得分:0)
我在这方面有点晚了,但这里有错误以及我如何解决它......
foreach (TouchLocation touchLocation in touchLocations)
{
if (touchLocation.State == TouchLocationState.Pressed)
{
pos[i] = touchLocation.Position;
}
i++;
}
当我写下这部分代码时,我觉得我很困倦(凌晨2点之后没有任何好事......甚至没有好的代码)我不知道为什么我要检查位置状态是否被按下了......那是为什么当我移动时它没有移动...第一帧它确实被按下了但是一旦你开始移动它就是它。移动......总而言之,删除它,如果它就像一个魅力......
foreach (TouchLocation touchLocation in touchLocations)
{
pos[i] = touchLocation.Position;
i++;
}
总而言之,现在它的行为符合预期。
干杯!