gpt4 book ai didi

c# - TouchLocation 对象无法正常工作

转载 作者:行者123 更新时间:2023-11-29 10:53:03 25 4
gpt4 key购买 nike

我正在尝试实现按下和释放按钮功能,但得到的结果无法正常工作,我无法弄清楚原因。

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];

我明白了

"Incorrect number of types or arguments"

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

最佳答案

我总是使用 touchCollection.Last()touchCollection.First() 之类的东西来只获取 TouchCollection 的一个组件。无论如何,我看不到您在那里所做的任何错误。

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

oldTouch.State == TouchLocationState.Pressed

但你必须检查:

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

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

作为建议,您为什么不使用 Rectangle 作为按钮的碰撞器?这样你就可以简单地调用:

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

而不是执行那个 if 语句。

关于c# - TouchLocation 对象无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19618955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com