2017-12-25 9 views
0

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)?

enter image description here

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; 
       } 
      } 
     } 
    } 
} 

Antwort

0

ich meine alten Android-Projekt überprüft und ich:

ScreenWidth = graphics.PreferredBackBufferWidth; 
ScreenHeight = graphics.PreferredBackBufferHeight; 

Auch, wie tut man Aktivitätsklasse aussehen?

+0

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

+0

Können Sie bitte mehr darüber erklären, wie Sie Ihren Code verwendet haben? – pytheron

Verwandte Themen