我正在尝试实施按下和释放按钮功能,并且我得到了一个无法解决原因的非工作结果。
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
对象?
或者我可能只是忽略了一个简单的错误?
答案 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
语句。