Xna加载屏幕

我正在制作2D XNA游戏。 我想实现加载屏幕时,东西要加载一段时间。 就像我login帐户时,连接到服务器,并生成世界。 我很确定它需要multithreading,因为我想能够做一些像“生成世界10%… 11%…”。

GenerateWorld() { //Call StartLoading("Generating World"); or something //Starter generating, Updating progress... //End loading screen and fade into world } 

帮助赞赏,我是新的。

根本不需要multithreading,但是在并行编程方面的一些知识可能是有用的。

在游戏循环中分批加载,你会没事的。

我强烈建议查看以下指南: http : //www.spikie.be/blog/page/Building-a-main-menu-and-loading-screens-in-XNA.aspx

我昨天看了一下,拿出了一个我正在做的项目的加载屏幕代码,认为这可能对你有帮助。

我不会真的叫multithreading矫枉过正。 它至less不会locking游戏/系统。 所以我要做的是有一个百分比的计数器,加载一个线程中的所有东西,并为每个项目加载增加计数器(由1 / 0-1规模的项目数)。 然后,在绘图函数中,只需要绘制一些当前的百分比。 然后,一旦数据完成加载,设置一个标志为true,表示游戏已经加载(这很重要,这样你就不会因为要绘制尚未加载的游戏而导致游戏崩溃)。

免责声明:这是一个不错的建议,所以要采取这样的做法。

如果您尝试使用multithreading,则可能会导致加载屏幕过大。 除非你有一个很酷的加载屏幕,比如(我认为是辐射的)安装屏幕,安装它的时候你会玩打砖块!

通常你可以用简单的方法做这件事,比如在一个短的(1秒?)的间隔里使用一个计时器来更新“加载的”百分比,而你的主应用程序加载你所需要的。

另外,如果你的游戏足够小,你甚至不需要加载屏幕!

我做了这样的事情:

  • ContentLoaderSpool类有:

    。 一个由加载文件的pathencryption的字典,其值为加载的内容(Texture2D,Song,Video等)的实例;

    。 一个属性标记,如果有一些内容仍然需要加载;

    。 一种方法要求开始加载内容。 它遍历Dictionary并填充它们的值。 此方法以高优先级的并行线程工作。 当这个方法运行时,主游戏循环正常继续。

游戏循环可以获取假脱机信息,更新一个进度条,或者查看是否加载了整个内容集合,最后切换到下一个屏幕。