每个帧都有XNA for WP7和多点触控更新

时间:2013-01-07 14:11:37

标签: c# windows-phone-7 xna xna-4.0 multi-touch

我遇到触控/多点触控输入问题。

我想绘制一个尺寸为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);
}

2 个答案:

答案 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++;
}

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

干杯!