Как создать заставку (или подобное) в XNA (VB.NET) - PullRequest
0 голосов
/ 11 апреля 2019

Время загрузки моей игры в XNA безумно (до 1 минуты), а экран при загрузке до первого розыгрыша становится белым, что заставляет людей поверить, что это ошибка, и закрыть приложение.Мне нужна помощь в создании какого-либо сообщения для них (например, заставки), чтобы они знали, что белый экран - это экран загрузки, или, что еще лучше, заменим белый экран на изображение.

Проект игрысделано в XNA, используя VB.NET.Ответы, которые я нашел до сих пор, либо относятся к чему-то другому, либо они не сработали.Я попытался добавить рисунок в разделе содержимого загрузки (по предложению человека), например:

spritebach.begin
draw my picture
spritebatch.end
GraphicsDevice.Present()

Однако это ничего не дает.Изображение даже не показывается, и тот же белый экран показывает до первого розыгрыша.

Чтобы было ясно, я не хочу, чтобы изображение показывалось после начала игры (как это предлагается в некоторых ответах на другие посты).) с "нажмите кнопку, чтобы начать".У меня уже есть вступительное видео, которое начинается сразу после загрузки.Я хочу что-то вместо белого экрана во время загрузки игры.

Дополнительные тесты:

Я попытался нарисовать в loadcontent и в функции обновления (позволяя загрузке всех ресурсов ждать), ноон не рисует в любой другой функции, кроме функции рисования.Кроме того, когда я вставляю «Exit Sub» в начале функции рисования, время загрузки сокращается до нескольких секунд.Таким образом, не загрузка контента сама по себе требует времени, но при первой загрузке функции извлечения, ЕСЛИ выходная подпрограмма не размещается раньше.

Любая помощь по этому вопросу будет принята с благодарностью!

1 Ответ

1 голос
/ 13 апреля 2019

Хорошо. Мой ответ, возможно, не совсем то, что вы хотите, потому что это специально для Monogame (XNA). Но я думаю, что идея та же самая. Ниже показано, как я реализовал заставку в своей игре.

На этапе объявления:

bool isLoadded;//= false by default

In LoadContent ():

//Load background image and spriteFont if necessary
fontBold = Content.Load<SpriteFont>("Arial_Normal_Windows"),//spriteFont
texLoadingBackground = Content.Load<Texture2D>(@"Arts\loadingBackground");
imageLoadingBackground = new ImageBackground(texLoadingBackground, Color.White, GraphicsDevice);//load the background you need to draw
//Then load everything you need after that
LoadGameContent();//
//After loading everything
isLoaded = true;

Метод Draw ():

    if (!isLoaded)
    {
        GraphicsDevice.Clear(new Color(222, 184, 135));

        spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied);

        imageLoadingBackground.Draw(spriteBatch);//only draw the background image while loading
        spriteBatch.DrawString(fontBold, "LOADING...",
            new Vector2(screenWidth / 2 - fontBold.MeasureString("LOADING...").X / 2 * scaleLarge,
            screenHeight / 2),
            Color.Black,
            0, new Vector2(0, 0), scaleLarge, SpriteEffects.None, 0);//and some text

        spriteBatch.End();
    }

    if (isLoaded)
    {        
        spriteBatch.Begin();
        //draw your main screen here
        spriteBatch.End();
    }

Более того, в моем основном методе LoadContent () я использую:

ThreadPool.QueueUserWorkItem(state =>
            {
                LoadGameContent();
            });

чтобы вызвать метод для загрузки игрового контента.

Просто измените синтаксис, чтобы он соответствовал вашей программе VBA, а также метод Draw().

Редактировать: Таймер для подсчета времени загрузки:

Объявить переменную: long loadTimeForSplashContent, loadTimeForAllContent, startTime;

В первой строке LoadContent() метод: loadTimeForSplashContent = DateTime.Now.Ticks;

После загрузки содержимого заставки: loadTimeForSplashContent = (DateTime.Now.Ticks - start) / 10000;//to convert to seconds

После загрузки всего контента: loadTimeForAllContent = (DateTime.Now.Ticks - start) / 10000;//to convert to seconds

Затем распечатайте их на экране или Console, чтобы увидеть, сколько они стоят. Вам нужно найти аналогичный метод DateTime.Now.Ticks в VBA, чтобы увидеть время в данный момент (извините, я не знаю).

Надеюсь, это поможет!

...