MonoGame 适配多种设备分辨率运行库ScalingClever
MonoGame 适配多种设备分辨率运行库。
NuGet:
https://www.nuget.org/packages/ScalingClever.UWP
https://www.nuget.org/packages/ScalingClever.Android
https://www.nuget.org/packages/ScalingClever.iOS
https://www.nuget.org/packages/ScalingClever.WP81
源码地址:https://github.com/chengcong/ScalingClever
功能:1.根据设备分辨率等比例放大游戏界面,全屏适配。2.触控点根据设备分辨率等比例放大,全屏适配
iOS,Android,UWP通用使用方法如下(1.0.3):
1.初始化Initialize()方法中加入:
ScalingClever.ResolutionScaling.Initialize(this, new Point(800, 480));
2.在LoadContent加入:
ScalingClever.ResolutionScaling.LoadContent(this, new Point(800, 480));
如果是UWP平台,该方法放在BeginDraw()方法中
3.重写BeginDraw()和EndDraw()
protected override bool BeginDraw()
{
//ScalingClever.ResolutionScaling.Initialize(this,new Point(800, 480));
ScalingClever.ResolutionScaling.BeginDraw(this);
return base.BeginDraw();
}
protected override void EndDraw()
{
ScalingClever.ResolutionScaling.EndDraw(this, spriteBatch);
base.EndDraw();
}
4.Update(GameTime gameTime)触控或点击坐标处理:
var touches = TouchPanel.GetState();
foreach (var touch in touches)
{
if (touch.State != TouchLocationState.Pressed)
{
var postion = ScalingClever.ResolutionScaling.Position(touch.Position);
var X = ScalingClever.ResolutionScaling.X(touch.Position.X);
var Y = ScalingClever.ResolutionScaling.Y(touch.Position.Y);
}
}
iOS平台使用方法:
1.打开iOS项目的Program.cs文件,在FinishedLaunching(UIApplication app)的RunGame();代码后加入
ScalingClever.ResolutionScaling.FinishedLaunching(new CoreGraphics.CGSize(800, 480));
2.找到类似如下设置缓冲区尺寸的代码,删除掉。没有,请忽略。(原因:http://www.xnadev.com/ios/monogame-setting-buffer-size-considerations-on-the-ios-platform/)
this.graphics.PreferredBackBufferWidth = 800; this.graphics.PreferredBackBufferHeight = 480; this.graphics.ApplyChanges();
Android平台使用方法:
1.使用通用方法1,2,3,作用是放大视图
2.找到Android项目中的Activity1.cs,在修改OnCreate方法中的代码如下所示:
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
var g = new Game1();
var view = (View)g.Services.GetService(typeof(View));
//全屏放大游戏触控坐标
var _view=ScalingClever.ResolutionScaling.OnCreate(view, new Point(800, 480));
SetContentView(_view);
g.Run();
}