WP7:在Silverlight处理时抑制XNA触摸输入?

WP7:在Silverlight处理时抑制XNA触摸输入?,第1张

概述我在Mango中有一个XNA Silverlight游戏:主要是XNA,顶部有一些Silverlight UI.我遇到的问题是当你点击按钮或与Silverlight控件交互时,触摸信息仍会传递给XNA游戏循环.你怎么压抑这个? 写了一堂课为我做跟踪.页面加载后(在Loaded处理程序中),创建它并为其提供根元素(因此它可以附加到LayoutUpdated事件).注册在游戏过程中可能覆盖游戏表面的任 我在Mango中有一个XNA Silverlight游戏:主要是XNA,顶部有一些Silverlight UI.我遇到的问题是当你点击按钮或与Silverlight控件交互时,触摸信息仍会传递给XNA游戏循环.你怎么压抑这个?解决方法 写了一堂课为我做跟踪.页面加载后(在Loaded处理程序中),创建它并为其提供根元素(因此它可以附加到LayoutUpdated事件).注册在游戏过程中可能覆盖游戏表面的任何控件.然后只需调用touchesControl并传递触摸位置,以确定是否应该忽略该点.它会缓存控件的区域,并在布局更新时更新它们.

应该适用于矩形元素移动,改变大小或折叠/扩展.

public class ControltouchTracker{    private List<FrameworkElement> controls = new List<FrameworkElement>();    private Dictionary<FrameworkElement,ControlRegion> controlBounds = new Dictionary<FrameworkElement,ControlRegion>();    public ControltouchTracker(FrameworkElement rootElement)    {        rootElement.LayoutUpdated += this.OnLayoutUpdated;    }    public voID RegisterControl(FrameworkElement control)    {        controls.Add(control);    }    public voID RemoveControl(FrameworkElement control)    {        controls.Remove(control);        controlBounds.Remove(control);    }    private voID OnLayoutUpdated(object sender,EventArgs e)    {        foreach (Control control in this.controls)        {            this.RefreshControlBounds(control);        }    }    private voID RefreshControlBounds(FrameworkElement control)    {        if (this.ControlisVisible(control))        {            try            {                Generaltransform controltransform = control.transformToVisual(Application.Current.RootVisual);                Point offset = controltransform.transform(new Point(0,0));                this.controlBounds[control] = new ControlRegion                {                    left = (float)offset.X,Right = (float)(offset.X + control.ActualWIDth),top = (float)offset.Y,Bottom = (float)(offset.Y + control.ActualHeight)                };            }            catch (ArgumentException)            {            }        }        else        {            if (this.controlBounds.ContainsKey(control))            {                this.controlBounds.Remove(control);            }        }    }    private bool ControlisVisible(FrameworkElement control)    {        // End case        if (control == null)        {            return true;        }        if (control.Visibility == Visibility.Collapsed)        {            return false;        }        return this.ControlisVisible(control.Parent as FrameworkElement);    }    public bool touchesControl(Vector2 touchposition)    {        foreach (ControlRegion region in this.controlBounds.Values)        {            if (touchposition.X >= region.left && touchposition.X <= region.Right &&                touchposition.Y >= region.top && touchposition.Y <= region.Bottom)            {                return true;            }        }        return false;    }    public class ControlRegion    {        public float left { get; set; }        public float Right { get; set; }        public float top { get; set; }        public float Bottom { get; set; }    }}

(编辑)更新了使用父元素更改可见性的示例.

总结

以上是内存溢出为你收集整理的WP7:在Silverlight处理时抑制XNA触摸输入?全部内容,希望文章能够帮你解决WP7:在Silverlight处理时抑制XNA触摸输入?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1005967.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存