在win8.1上改变方向后,单一游戏中的触摸面板重置

本文关键字:触摸 游戏 单一 win8 改变方向 | 更新日期: 2023-09-27 18:07:51

我正在使用c#/Monogame (VS 2013)创建一个通用(Win 8.1 + Win Phone 8.1)应用程序。我使用的是MonoGame v3.4.

在我的game1.cs初始化代码中,我设置:
TouchPanel.DisplayWidth = _drawState.ScreenBounds.Width;
TouchPanel.DisplayHeight = _drawState.ScreenBounds.Height;

所以触摸输入与我的游戏屏幕尺寸一致。屏幕边界是一个矩形,包含我的虚拟屏幕尺寸的尺寸)。

我的游戏设置为只支持肖像方向:我在包中只选择了肖像和肖像翻转方向。appxmanifest文件的目标(Win和WinPhone),我已经设置了这个在game1.cs Init方法:

graphics.SupportedOrientations = DisplayOrientation.Portrait |
DisplayOrientation.PortraitDown

在Win 8.1模拟器和真正的Win 8.1平板电脑上测试游戏,我发现在方向改变后(顺便说一下,模拟器旋转并截取游戏区域,而真正的设备,如预期的那样,保持纵向),TouchPanel有错误的尺寸-它重置为实际屏幕尺寸,所以我所有的触摸都关闭了。

这只发生在Win8.1目标上- Win Phone目标正常工作。

任何想法?

编辑:

因为我找不到发生了什么,我只是决定订阅大小变化事件并设置TouchPanel.DisplayWidthTouchPanel.DisplayHeight变量:

this.Window.AllowUserResizing = true;
this.Window.ClientSizeChanged += Window_ClientSizeChanged;

在模拟器上调用Window_ClientSizeChanged方法,而不是在真实设备上调用。

I tried with:

_window = Windows.UI.Core.CoreWindow.GetForCurrentThread();
_window.SizeChanged += _window_SizeChanged;

同样的东西-在模拟器上调用,而不是在设备上。

在win8.1上改变方向后,单一游戏中的触摸面板重置

无法找到这个问题的解决方案,我只是决定以不同的方式处理触摸输入;而不是设置TouchPanel。DisplayWidth,高度,我决定使用一个简单的函数将触摸(和鼠标)位置转换为虚拟屏幕坐标:

ScreenYScale = GraphicsDevice.PresentationParameters.BackBufferHeight / 1920.0f;
public Vector2 TranslateCoords(Vector2 coords)
{
    return new Vector2(coords.X / ScreenYScale, coords.Y / ScreenYScale);
}