Derzeit mein Spiel für das Gerät mit dem folgenden Code den Bildschirm an dem richtigen Seitenverhältnis füllt:Spielbildschirm Dehnen auf Android zu einheitlicher Auflösung auf verschiedene Geräten
In Initialise()
ich habe:
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();
}
In LoadContent()
ich habe:
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
float screenscale = screen_width/screen_height;
SpriteScale = Matrix.CreateScale(screenscale, screenscale, 1f);
//load textures here//
}
In Draw()
ich habe:
protected override void Draw(GameTime gameTime)
{
spriteBatch.Begin(SpriteSortMode.Immediate, null, null, null, null, null, SpriteScale);
//Draw sprites here//
spriteBatch.End();
base.Draw(gameTime);
}
Mit diesem Code wird jedoch abhängig von der Gerätebreite eine andere Anzahl an Spielfenstern angezeigt.
Wie bekomme ich die gleiche Menge an Spielbildschirm zur Anzeige und Skalierung abhängig vom Gerät (wie im folgenden Diagramm gezeigt)?
EDIT:
In Aktivität der Klasse I haben:
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;
}
}
}
}
}
Hallo, danke für deine Antwort, ich habe meine Aktivitätsklasse hinzugefügt (siehe oben). Ich habe versucht mit graphics.PreferredBackBuffer, aber es scheint keinen Einfluss auf die Auflösung oder Bildschirmgröße. – pytheron
Können Sie bitte mehr darüber erklären, wie Sie Ihren Code verwendet haben? – pytheron