TouchLocation对象无法正常工作

时间:2013-10-27 14:07:46

标签: c# ios xna xamarin monogame

我正在尝试实施按下和释放按钮功能,并且我得到了一个无法解决原因的非工作结果。

public class Button
{
    public TouchLocation oldTouch, currentTouch;

    public virtual void Update(GameTime gameTime)
    {
        TouchCollection touchCollection = TouchPanel.GetState ();

        if (touchCollection.Count > 0) {
            currentTouch = touchCollection [0];

            if (currentTouch.Position.X > position.X && currentTouch.Position.X < position.X + width &&
               currentTouch.Position.Y > position.Y && currentTouch.Position.Y < position.Y + height) {

                if (currentTouch.State == TouchLocationState.Released && oldTouch.State == TouchLocationState.Pressed) {
                    buttonEvent.Invoke (this, new EventArgs ());
                }
            }
        }

        oldTouch = currentTouch;

    }
}

首先,当我指定以下对象时:

currentTouch = touchCollection [0];

我得到了

  

“类型或参数数量不正确”

以红色表示本地调试窗口中的值(无错误,只是红色文本值) 然而,它仍然正确地通过位置检查IF语句但它没有通过Pressed / Release IF语句。如果我将currentTouch替换为touchCollection[0],那么一切都按预期工作 我是否正确使用/分配TouchLocation对象? 或者我可能只是忽略了一个简单的错误?

1 个答案:

答案 0 :(得分:2)

我总是使用touchCollection.Last()touchCollection.First()之类的内容来获取TouchCollection的一个组件。无论如何,我没有看到你在那里做的任何错误。

对于你的问题,我认为你不能只做

oldTouch.State == TouchLocationState.Pressed

但你必须检查:

oldTouch.State == TouchLocationState.Pressed || oldTouch.State == TouchLocationState.Moved

因为您不知道XNA是如何检测到最后一次触摸的。

作为建议,为什么不使用Rectangle s作为按钮的对撞机?通过这种方式,您只需致电:

Rectangle.Contains(new Point(int)currentTouch.Position.X, (int)currentTouch.Position.Y))

而不是执行if语句。