在Android上拉伸游戏画面以跨设备统一分辨率
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Android上拉伸游戏画面以跨设备统一分辨率相关的知识,希望对你有一定的参考价值。
目前,我的游戏使用以下代码以正确的宽高比填充屏幕:
在Initialise()
我有:
protected override void Initialize()
{
graphics.IsFullScreen = true;
screen_width = graphics.GraphicsDevice.Viewport.Width;
screen_height = graphics.GraphicsDevice.Viewport.Height;
graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight;
graphics.ApplyChanges();
base.Initialize();
}
在LoadContent()
我有:
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
float screenscale = screen_width / screen_height;
SpriteScale = Matrix.CreateScale(screenscale, screenscale, 1f);
//load textures here//
}
在Draw()
我有:
protected override void Draw(GameTime gameTime)
{
spriteBatch.Begin(SpriteSortMode.Immediate, null, null, null, null, null, SpriteScale);
//Draw sprites here//
spriteBatch.End();
base.Draw(gameTime);
}
但是,使用此代码会根据设备宽度显示不同数量的游戏屏幕。
如何根据设备显示和缩放相同数量的游戏画面(如下图所示)?
编辑:
在活动类我有:
using android.App;
using Android.Content.PM;
using Android.OS;
using Android.Views;
namespace android_game3
{
[Activity(Label = "android_game3"
, MainLauncher = true
, Icon = "@drawable/icon"
, Theme = "@style/Theme.Splash"
, AlwaysRetainTaskState = true
, LaunchMode = Android.Content.PM.LaunchMode.SingleInstance
, ScreenOrientation = ScreenOrientation.UserLandscape
, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize)]
public class Activity1 : Microsoft.Xna.Framework.AndroidGameActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
var g = new Game1();
SetContentView((View)g.Services.GetService(typeof(View)));
g.Run();
//Hide action bar
View vw = (View)g.Services.GetService(typeof(View));
vw.SystemUiVisibility = (StatusBarVisibility)SystemUiFlags.HideNavigation | (StatusBarVisibility)SystemUiFlags.ImmersiveSticky;
vw.SetOnSystemUiVisibilityChangeListener(new MyUiVisibilityChangeListener(vw));
}
//Hide action bar
private class MyUiVisibilityChangeListener : Java.Lang.Object, View.IOnSystemUiVisibilityChangeListener
{
View targetView;
public MyUiVisibilityChangeListener(View v)
{
targetView = v;
}
public void OnSystemUiVisibilityChange(StatusBarVisibility v)
{
if (targetView.SystemUiVisibility != ((StatusBarVisibility)SystemUiFlags.HideNavigation | (StatusBarVisibility)SystemUiFlags.Immersive))
{
targetView.SystemUiVisibility = (StatusBarVisibility)SystemUiFlags.HideNavigation | (StatusBarVisibility)SystemUiFlags.ImmersiveSticky;
}
}
}
}
}
答案
我检查了我的旧android项目,我用过:
ScreenWidth = graphics.PreferredBackBufferWidth;
ScreenHeight = graphics.PreferredBackBufferHeight;
另外,你的活动课怎么样?
以上是关于在Android上拉伸游戏画面以跨设备统一分辨率的主要内容,如果未能解决你的问题,请参考以下文章