在AndroidGameActivity中运行LoadContent时启动/加载屏幕

问题描述 投票:3回答:1

首先,我想说一般来说我对C#和Monogame都很陌生。

我的问题是显示屏幕。我有一个名为loadingsplash.xml的布局资源,并希望在Game活动运行时显示它LoadContent();

流程图是:Main.xml:按下按钮>在LoadContent> GameActivity期间的ProgressDialog

我想要的流程图:Main.xml:按下按钮>在LoadContent> GameActivity期间显示loadingsplash.xml

MainMenu.cs

[Activity( Label = "theApp", Theme = "@android:style/Theme.NoTitleBar.Fullscreen", MainLauncher=true, ScreenOrientation=Android.Content.PM.ScreenOrientation.Landscape)]

public class MainMenu : Activity, IDialogInterfaceOnClickListener
{
......
void GoButton_Click(object sender, EventArgs e)
{
    Intent theActivity = new Intent(this, typeof(GameActivity));
    StartActivity(theActivity);
}

theActivity.cs

namespace theApp
{
    [Activity(Theme = "@android:style/Theme.NoTitleBar.Fullscreen", Label = "theApp", Icon = "@drawable/icon", ScreenOrientation = Android.Content.PM.ScreenOrientation.Landscape, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden)]

    public class GameActivity : Microsoft.Xna.Framework.AndroidGameActivity, IDialogInterfaceOnClickListener
    {
        myGame game = null;
        static GameBundle gameBundle = null;
        ProgressDialog dialog;
        const int WindowID = 10001;

        protected override void OnCreate(Bundle bundle)
        {
            loadedOnce = true;
//this works
//
//dialog = new ProgressDialog(this);
//dialog.SetMessage("Loading...");
//dialog.Show();
//

//Loading Splash screen invocation code goes here?

    if (game == null)
       {
         myGame.Activity = this;
         base.OnCreate (bundle);
         game = new myGame();
         game.NativeCommand = ProcessCommand;
         game.Window.GraphicsMode = new AndroidGraphicsMode(0, 4, 0, 0, 0, false);
         game.Window.Id = WindowID;

                if (gameBundle == null)
                {
                    game.Run();
                }
                else
                {
                    if (gameBundle != null)
                    {
                        resumeGame.Show();
                    }
                }
            }
            SetContentView(game.Window);
        }

myGame.cs

public class myGame : Microsoft.Xna.Framework.Game
{

public myGame()
    {
        graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Resources/Drawable";
        unloading = false;
        graphics.PreferMultiSampling = true;
        graphics.IsFullScreen = true;
        graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft;
    }

    protected override void Initialize()
    {
        graphics.SynchronizeWithVerticalRetrace = true;
        graphics.PreferredBackBufferWidth =  800;
        graphics.PreferredBackBufferHeight = 480;
        screenManager = new ScreenManager(this, 800, 480);
        base.Initialize();
    }

    bool loaded = false;
    protected override void LoadContent()
    {
        spriteBatch = new SpriteBatch(this.GraphicsDevice);
        font = Content.Load<SpriteFont>("Arial");
        GraphicsDevice.Clear(Color.Black);
        ThreadPool.QueueUserWorkItem(state =>
            {
                            ...
                            loaded = true;
            });

如果我用setContentView(Resource.Layout.LoadingSplash)调用LoadingSplash;在base.OnCreate(bundle)之前我得到一个异常,必须调用requestFeature。

c# android mono monogame
1个回答
0
投票

对于仍在寻找这个问题答案的人,我建议您不要使用不同的xml文件来使用单独的屏幕,只需在Monogame中操作它。

请在这篇文章中查看我的答案:https://stackoverflow.com/a/55667101/8594783

© www.soinside.com 2019 - 2024. All rights reserved.