2

我在触摸/多点触控输入方面遇到问题。

我想在用户按下的任何地方(任务完成)绘制一个尺寸为 100x100 的小矩形,但我也希望它们在用户移动手指时移动(这不会在 atm 发生)。

除了不动的部分,我的行为也很奇怪,假设我先用拇指触摸,然后用中指触摸。每个手指下方出现两个立方体,但如果我移开我首先放置的手指(在这种情况下是拇指),我放置的第二个手指(中指)下方的立方体将消失,而我拇指所在的那个仍然存在。我想这个问题会在我得到它以在有运动时正确更新后自行解决。

这是绘制和更新片段。任何帮助表示赞赏:

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);
}
4

2 回答 2

0

我在这方面有点晚了,但是这就是问题所在以及我如何解决它...

foreach (TouchLocation touchLocation in touchLocations)
{
    if (touchLocation.State == TouchLocationState.Pressed)
    {
        pos[i] = touchLocation.Position;
    }
    i++;
}

我想当我写这部分代码时我很困(凌晨 2 点之后没有什么好事发生……甚至不是好的代码)我不知道为什么我要检查位置状态是否被按下……这就是为什么它没有'当我移动时不要移动......第一帧确实被按下了但是一旦你开始移动它它就是.Moved......总而言之,删除了它,它就像一个魅力......

foreach (TouchLocation touchLocation in touchLocations)
{
    pos[i] = touchLocation.Position;
    i++;
}

总而言之,现在它的行为符合预期。

干杯!

于 2013-01-15T10:56:05.590 回答
0

假设您要将触摸位置与其位置相关联,我建议您使用字典。关键应该是 TouchLocation.Id

对于给定的交互,TouchLocation.Id 将保持不变。无法保证从一帧到另一帧的 TouchLocations 顺序相同,因此您必须使用它们的 ID 而不是它们在集合中出现的顺序。

于 2013-01-08T22:07:37.640 回答