在Win 8.1

时间:2015-08-12 20:16:18

标签: c# windows-phone-8.1 windows-8.1 monogame

我正在使用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.DisplayWidthTouchPanel.DisplayHeight变量:

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

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

我尝试过:

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

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

1 个答案:

答案 0 :(得分:0)

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

ScreenYScale = GraphicsDevice.PresentationParameters.BackBufferHeight / 1920.0f;

public Vector2 TranslateCoords(Vector2 coords)
{
    return new Vector2(coords.X / ScreenYScale, coords.Y / ScreenYScale);
}