在“加载”屏幕中应该发生什么?


19

我是否只需要将所有图形的实例创建到从文件加载的内存中?处理此问题的最佳方法是什么?我是否只需要某种资产管理器来在加载屏幕期间创建这些图形实例,然后在以后进行引用?

需要在游戏中预装哪些常见的东西?我应该预加载多少?

值得展示某种进度条吗?如何缩短加载时间?加载屏幕应该是什么样的?

有哪些加载屏幕的好例子?任何代码示例?

具体来说,我的游戏是针对Andriod(Java / mobile)的,但请随时将您的答案设为通用。


2
我知道这并不是您所要的,但是我对加载屏幕期间应该发生的事情的建议是:有趣的事情!:)用一些故事(如过场动画),迷你游戏或可能已经显示的菜单来招待玩家。
巴特·范·海克洛姆

Answers:


13

要预加载的典型事情是您实时需要的任何东西。除了剪贴图和超大纹理等概念(想法是加载所需的零件,并在世界各地移动时对其进行迭代更新)之外,您将想要保留关卡/区域/任何区域所需的一切在内存中而不是磁盘中。IO是sloooow,并且您不希望在转弯并且即将显示纹理时加载纹理。所谓的一切,就是纹理,声音,网格,元数据……一切。

如果您可以显示进度条(即您已准确地将加载步骤映射到百分比),则一定要显示它。如果没有,请至少显示一些内容,例如短消息或加载指示符,并在每个步骤之后进行更新,以便您至少可以判断正在发生的事情。

如果您需要某些东西,但不是马上就知道,可以将其加载到后台,然后在游戏过早的情况下暂停游戏(虽然不好,但请确保很少发生)。这将帮助您减少加载时间。我对android开发了解不多,或者与游戏一起处理设备是否需要太多,但通常在CPU上比较轻便,所以那里应该没有大问题。


19

您需要成为“网状样条线”


2
哈哈,不错的参考书:)
Bryan Denny

尽管这显然是个玩笑,但+1是引用在加载过程中保持玩家忙碌的一个很好的例子。这种简单的技术只需要添加无意义的文本即可。“不要挨饿”是另一个做得很好的游戏示例,并且巧合地(也可以不是)还涉及“网状”:dont-starve-game.wikia.com/wiki/World_Generation_Screen
2014年

3

取决于您要使用一个加载屏幕,即时电平转换还是多个加载。
我想说后者在记忆上会更好。
就像是:
//First loading screen
Load menu layouts or whatever
Load GUI assets
Show something to pass the time
Switch to menu

//In between levels
Remove any graphics specific to the last level - get rid of something that isn't going to reappear like a boss.
Load level graphics that haven't already been loaded
Again, show progress or something to pass the time

并且在加载时,请确保没有黑屏。或就此而言,静态屏幕。很多时候,我在应用程序启动时看到静态图像一段时间,然后立即认为它已崩溃。
吸引玩家参与的一种好方法就是绘制精美的游戏场景背景或故事情节参考。带有/不带有百分比的加载栏,只要它不是静态的“加载”;然后也许是一些信息。


1
不过,就皮特而言,如果您有一个带有百分比的动画加载条,请使其逐渐准确地向上移动,而不是在90%的时间内停留在10%的位置,然后再跳到100%。如果您有非百分比加载动画,则至少要使其动画以使其能够轮询加载-这样,当加载由于某种原因崩溃时可以将其停止。我看到太多的游戏在自己的线程中为加载的动画设置动画,当加载线程崩溃时,动画会愉快地播放。那有点违反了加载动画的目的。
Kaj 2010年

我完全可以同意。我不认为如果这样跳就不会做得很好。
共产党鸭子

2

在iPhone和Android平台上,您必须加载所有纹理和声音。在旧手机(如iPhone 2G,3G或G1)上,加载纹理和声音的速度确实很慢。您无法在游戏中做到这一点。


2

正如其他人所说,如果您可以在开始播放关卡之前加载所有数据,那么您的性能将会更好。这是在游戏过程中加载资产的帧时故障的常见原因。

加载屏幕期间的常见操作是静态背景图像,非常简单的关卡,一些有关播放的提示和技巧,快速动画等。

这是APB的加载屏幕。非常酷。:) http://www.youtube.com/watch?v=p5STix1t_1E&feature=related

这是一些在加载屏幕上显示进度条的伪代码:



LoadScreen::Init()
{
  mAssetsToLoad.add("Background.png");
  mAssetsToLoad.add("Player.png");
}

LoadScreen::Update()
{
  mProgress += 1;
  mAssetManager.load(mAssetsToLoad.top());
  mAssetsToLoad.pop();

  if mAssetsToLoad.empty()
    mDone = true;
}


LoadScreen::Draw()
{
  for( int i = 0; i != mProgress; ++i)
  {
     Vector2 pos(i*mProgressPartTexture.Width, 100);
     DrawProgressBarPart(pos, mProgressPartTexture);
  }
}

gh,被迫使用!=,因为它在我使用<


1
哇,APB的载入画面看起来真的很酷:)
Bryan Denny

如果将代码缩进四个空格而不是使用<pre> <code>标记,则可以使用<而不是!=而不破坏格式。
mmyers,2010年

嗯,是的,但这是一个很大的痛苦。为什么不只提供自定义代码标签?
斯雷克尔2010年

1

加载屏幕可用于隐藏几乎所有内容。加载资产,需要建立的任何连接(tcp等),使用游戏对象填充地图以及进行初始化。

我倾向于做的事情是拥有某种资产管理器(或者可能是每种资产类型的管理器-声音,图形等),并让它们将要使用的内容加载到内存中。然后,让您的游戏将参考从管理者中拉出来。

显示进度条,确定要预加载的内容等似乎取决于您的项目,它取决于加载时间和口味。如果进度条很准确,并且进度很长,那么进度条会很不错(很高兴知道您需要等待多长时间)。

话虽这么说,但在我的Android手机上,我倾向于使用具有自己的自定义,精美完成的加载屏幕的应用。它不需要栏,但是动画告诉用户程序正在运行。我相信android有可以使用的默认栏,效果很好。

这是您可能会感兴趣一个SO问题。


1

值得注意的是,具有质量控制要求的平台(例如X360,PS3,DS等)都将要求您在加载屏幕(或实际上任何保持静态状态超过几秒钟的屏幕)中都具有某种形式的动画。 )。

这是因为,否则用户可能会认为您的游戏已经崩溃,而实际上这只是花费很长时间才能加载。即使不是必需的,我也一定会建议。

任何形式的动画都可以,但是简单的进度条可能不是最好的,因为加载过程中的任何较大步长都可能导致进度条在一段时间内完全不移动,这意味着屏幕就像静止的屏幕一样静止。根本没有吧。除了显示进度指示器外,最好显示一些不断移动的图像,例如旋转的图标。


1
当然,如果加载程序正在异步加载,则您应该能够轮询其进度,以便可以更准确地更新百分比。这样,玩家便知道,如果确实卡在某个百分比上,实际上是错误的。另外,就像我在其他地方说过的那样,请不要在未实际检查加载线程是否还在运行的情况下更新动画,否则在游戏有效崩溃时您会开心地旋转。
Kaj 2010年

1

对于Conquest的加载屏幕,我给出了一些任务描述(它是什么游戏类型,以及任务的故事情节),以及一些基本的命令帮助。

在后台,我正在加载声音。这些图形都是按需加载的,对于我们的游戏来说似乎效果很好,但是声音是熊,所以我预先加载了任务所需的所有声音。在加载所有内容之前,“加载/开始”按钮将被禁用,但是我没有任何类型的动画(添加动画是一件好事)。

这是我们的第一款游戏,所以我们仍然学到很多东西,但是到目前为止,这对我们来说还算可以。

征服的载入画面

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.