在 Win 8.1 上更改方向后,MonoGame 中的触摸屏会重置
TouchPanel in MonoGame reset after orientation change on Win 8.1
我正在使用 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;
因此触摸输入与我的游戏屏幕尺寸一致(_drawState.ScreenBounds 是一个包含我的虚拟屏幕尺寸的矩形)。
我的游戏设置为仅支持纵向方向:我在 Package.appxmanifest 文件中为两个目标(Win 和 WinPhone)只选择了纵向和纵向翻转方向,并且我已在 game1.cs Init 方法中设置:
graphics.SupportedOrientations = DisplayOrientation.Portrait |
DisplayOrientation.PortraitDown
在 Win 8.1 模拟器和真实的 Win 8.1 平板电脑上测试游戏,我发现方向改变后(顺便说一句,模拟器会旋转和裁剪游戏区域,而真实设备,正如预期的那样,保持纵向方面),TouchPanel 的尺寸错误 - 它重置为实际屏幕尺寸,所以我的所有触摸都关闭了。
这只发生在 Win8.1 目标上 - Win Phone 目标按预期工作。
有什么想法吗?
编辑:
因为我找不到发生了什么,所以我决定订阅尺寸改变事件并设置 TouchPanel.DisplayWidth
和 TouchPanel.DisplayHeight
变量:
this.Window.AllowUserResizing = true;
this.Window.ClientSizeChanged += Window_ClientSizeChanged;
模拟器上调用了Window_ClientSizeChanged方法,真机上没有调用。
我试过:
_window = Windows.UI.Core.CoreWindow.GetForCurrentThread();
_window.SizeChanged += _window_SizeChanged;
同样的事情 - 在模拟器上调用,而不是在设备上调用。
找不到解决这个问题的方法,我只是决定以不同的方式处理触摸输入;我决定使用一个简单的函数将触摸(和鼠标)位置转换为虚拟屏幕坐标,而不是设置 TouchPanel.DisplayWidth 和高度:
ScreenYScale = GraphicsDevice.PresentationParameters.BackBufferHeight / 1920.0f;
public Vector2 TranslateCoords(Vector2 coords)
{
return new Vector2(coords.X / ScreenYScale, coords.Y / ScreenYScale);
}
我正在使用 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;
因此触摸输入与我的游戏屏幕尺寸一致(_drawState.ScreenBounds 是一个包含我的虚拟屏幕尺寸的矩形)。
我的游戏设置为仅支持纵向方向:我在 Package.appxmanifest 文件中为两个目标(Win 和 WinPhone)只选择了纵向和纵向翻转方向,并且我已在 game1.cs Init 方法中设置:
graphics.SupportedOrientations = DisplayOrientation.Portrait |
DisplayOrientation.PortraitDown
在 Win 8.1 模拟器和真实的 Win 8.1 平板电脑上测试游戏,我发现方向改变后(顺便说一句,模拟器会旋转和裁剪游戏区域,而真实设备,正如预期的那样,保持纵向方面),TouchPanel 的尺寸错误 - 它重置为实际屏幕尺寸,所以我的所有触摸都关闭了。
这只发生在 Win8.1 目标上 - Win Phone 目标按预期工作。
有什么想法吗?
编辑:
因为我找不到发生了什么,所以我决定订阅尺寸改变事件并设置 TouchPanel.DisplayWidth
和 TouchPanel.DisplayHeight
变量:
this.Window.AllowUserResizing = true;
this.Window.ClientSizeChanged += Window_ClientSizeChanged;
模拟器上调用了Window_ClientSizeChanged方法,真机上没有调用。
我试过:
_window = Windows.UI.Core.CoreWindow.GetForCurrentThread();
_window.SizeChanged += _window_SizeChanged;
同样的事情 - 在模拟器上调用,而不是在设备上调用。
找不到解决这个问题的方法,我只是决定以不同的方式处理触摸输入;我决定使用一个简单的函数将触摸(和鼠标)位置转换为虚拟屏幕坐标,而不是设置 TouchPanel.DisplayWidth 和高度:
ScreenYScale = GraphicsDevice.PresentationParameters.BackBufferHeight / 1920.0f;
public Vector2 TranslateCoords(Vector2 coords)
{
return new Vector2(coords.X / ScreenYScale, coords.Y / ScreenYScale);
}