如何在XNA(VB.NET)中创建启动画面(或类似)

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

在XNA中我的游戏加载时间是疯狂的(最多1分钟),并且在第一次抽奖之前加载的屏幕都是白色的,触发人们相信它是一个错误并关闭应用程序。我需要帮助为他们创建某种消息(例如启动画面),因此他们知道白屏是一个加载屏幕,或者更好的是,交换白色屏幕的图片。

游戏项目是在XNA中使用VB.NET制作的。到目前为止我找到的答案要么适用于别的东西,要么就是没有用。我试图在加载内容部分添加图片的绘制(如人的建议),例如:

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

但是,这没有任何作用。图片甚至没有显示,并且在第一次抽奖之前显示相同的白色屏幕。

为了清楚起见,我不希望在游戏开始后显示图片(正如其他帖子的一些答案所示),并按下“按下按钮开始”。我已经加载了一个介绍视频。在加载游戏期间我想要一些东西而不是白色屏幕。

附加测试:

我尝试绘制loadcontent和更新函数(让所有资源的加载等待),但它不会绘制除draw函数之外的任何其他函数。此外,当我在绘图功能的早期放置“退出子”时,加载时间减少到几秒钟。所以它不是内容本身的加载需要时间,但第一次加载drawfunction时,如果一个退出子没有提前放置。

任何有关这方面的帮助将不胜感激!

vb.net visual-studio xna startup splash-screen
1个回答
1
投票

好。我的回答也许并不完全是你想要的,因为它专门用于Monogame(XNA)。但我认为这个想法是一样的。以下是我在游戏中实现启动画面的方法。

在申报阶段:

bool isLoadded;//= false by default

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

加载启动画面内容后:qazxsw poi

加载所有内容后:loadTimeForSplashContent = (DateTime.Now.Ticks - start) / 10000;//to convert to seconds

然后将它们打印到屏幕或loadTimeForAllContent = (DateTime.Now.Ticks - start) / 10000;//to convert to seconds,看看它们有多少。你需要在Console找到类似的DateTime.Now.Ticks方法来查看当时的时间(对不起,我不知道)。

希望这可以帮助!

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