MonoGame在iOS平台使用this.graphics.PreferredBackBufferWidth,this.graphics.PreferredBackBufferHeight设置缓冲区大小方法是在Game构造函数中加入如下代码,设置以后屏幕的触控(点击)坐标X的最大值是800,触控(点击)坐标Y的最大值是480。

this.graphics.PreferredBackBufferWidth = 800;
this.graphics.PreferredBackBufferHeight = 480;
this.graphics.ApplyChanges();

 

然而在Draw方法中绘制图片却不是根据缓冲区大小坐标,仍旧采用默认设备屏幕大小坐标。比如iphone 6s 960×1136,也就是根据800×480绘制图片覆盖整个屏幕得到的最终结果如图:

 

image

 

如果需要统一触控点坐标和绘图坐标有三种方法:

1.需要在Initialize方法中加入如下代码,但随之而来的麻烦就是如何绘制图像位置,不能使用传统X,Y坐标控制,需要用比例计算出最终的X,Y(稍候会介绍):

this.graphics.PreferredBackBufferWidth = this.graphics.GraphicsDevice.Viewport.Width;
this.graphics.PreferredBackBufferHeight = this.graphics.GraphicsDevice.Viewport.Height;
this.graphics.ApplyChanges();

2.写死缓冲区大小,放大整个游戏界面,推荐使用ScalingClever,具体方法请参考:https://www.xnadevelop.com/monogame-developing-cross-platform-games/mgclever/

3.不设置缓冲区大小,也就是删除PreferredBackBuffer相关的代码,Draw方法仍旧使用固定像素布局,比如800×480。然后使用放大iOS平台的View来实现多种分辨率适配,具体方法请参考:https://www.xnadevelop.com/ios/monogame-ios-game-view-scale/