Was alles sollte während des Ladevorgangs geschehen?


19

Muss ich nur Instanzen aller meiner Grafiken im Speicher erstellen, die aus einer Datei geladen werden? Was ist der beste Weg, um damit umzugehen? Benötige ich nur eine Art Asset Manager, der diese Grafikinstanzen während des Ladevorgangs erstellt und auf den später verwiesen wird?

Was sind die häufigsten Dinge, die in Spielen vorinstalliert werden müssen? Wie viel sollte ich vorladen?

Lohnt es sich, eine Art Fortschrittsbalken anzuzeigen? Wie kann ich die Ladezeiten kurz halten? Wie soll der Ladebildschirm aussehen?

Was sind einige gute Beispiele für Ladebildschirme? Irgendwelche Codebeispiele?

Insbesondere ist mein Spiel für Andriod (Java / Mobile), aber Sie können Ihre Antworten auch generisch gestalten.


2
Ich weiß, dass dies nicht genau das ist, wonach Sie fragen, aber mein Ratschlag für das, was während des Ladebildschirms geschehen sollte, lautet: Etwas Interessantes! :) Unterhalte den Spieler mit einer kleinen Geschichte (wie einer Zwischensequenz), einem Minispiel oder zeige vielleicht bereits ein Menü, soweit dies möglich ist.
Bart van Heukelom

Antworten:


13

Die typischen Dinge, die vorab geladen werden müssen, sind alles, was Sie in Echtzeit benötigen. Speichern Sie für Konzepte wie Clipmaps und Megatexturen (wo die Idee ist, die Teile zu laden, die Sie benötigen, und iterativ zu aktualisieren, wenn Sie sich in der Welt bewegen), Sie werden alles behalten wollen, was Sie für Ihr Level / Gebiet / was auch immer brauchen im Speicher anstatt auf der Festplatte. IO ist langsam, und Sie möchten Ihre Texturen nicht laden, wenn Sie um die Ecke biegen und sie angezeigt werden. Und mit allem meine ich Texturen, Sounds, Meshes, Metadaten ... alles.

Wenn Sie einen Fortschrittsbalken anzeigen können (dh Sie haben eine genaue Zuordnung der Ladeschritte zum Prozentsatz), dann zeigen Sie ihn auf jeden Fall an. Wenn nicht, zeigen Sie zumindest etwas an, z. B. eine kurze Textnachricht oder eine Ladeanzeige, die nach jedem Schritt aktualisiert wird, damit Sie zumindest erkennen können, dass etwas passiert.

Wenn Sie wissen, dass etwas benötigt wird, aber nicht sofort, können Sie es im Hintergrund laden und das Spiel abbrechen (nicht besonders gut, aber stellen Sie sicher, dass es selten passiert), wenn es zu früh benötigt wird. Dies hilft Ihnen, die Ladezeit niedrig zu halten. Ich weiß nicht viel über die Android-Entwicklung, oder ob es zu viel für das Gerät sein wird, neben dem Spiel damit umzugehen, aber es ist normalerweise ziemlich leicht für die CPU, so dass es dort kein großes Problem geben sollte.


19

Sie müssen "Reticulating Splines" sein


2
Haha, nette Referenz :)
Bryan Denny

Obwohl dies offensichtlich ein Scherz ist, +1 für die Bezugnahme auf ein großartiges Beispiel dafür, wie Spieler während des Ladens beschäftigt bleiben. Eine so einfache Technik, die nicht mehr Aufwand erfordert als das Hinzufügen von unsinnigem Text. "Don't Starve" ist ein weiteres Beispiel für ein Spiel, das dies gut macht, und zufällig (oder auch nicht) geht es auch um "Reticulating": dont-starve-game.wikia.com/wiki/World_Generation_Screen
twiz

3

Kommt darauf an, ob Sie einen Ladebildschirm und sofortige Ebenenübergänge oder mehrere Ladevorgänge anstreben.
Ich würde sagen, dass Letzteres besser im Gedächtnis bleibt.
So etwas wie:
//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

Achten Sie beim Laden darauf, dass kein schwarzer Bildschirm angezeigt wird. Oder übrigens ein statischer Bildschirm. Oft habe ich zu Beginn einer App ein statisches Bild für eine Weile gesehen und sofort gedacht, dass es abgestürzt ist.
Ein guter Weg, um den Spieler einzubeziehen, wäre einfach ein schön gezeichneter Hintergrund einer Szene im Spiel oder eine Handlungsreferenz. ein Ladebalken mit / ohne Prozentsatz, sofern es sich nicht um ein statisches "Laden" handelt; und dann vielleicht ein paar informationen.


1
Um Himmels willen: Wenn Sie einen animierenden Ladebalken mit einem Prozentsatz haben, stellen Sie ihn so ein, dass er sich allmählich und genau nach oben bewegt, anstatt 90% bei 10% zu bleiben und dann auf 100% zu springen. Wenn Sie eine nicht prozentuale Ladeanimation haben, sollten Sie diese zumindest so einstellen, dass sie die Ladung abruft. Auf diese Weise können Sie sie stoppen, wenn die Ladung aus irgendeinem Grund abstürzt. Ich sehe zu viele Spiele, die die Lade-Animation in ihrem eigenen Thread animieren, und wenn der Lade-Thread abstürzt, spielt die Animation glücklich weiter. Das vereitelt irgendwie den Zweck der Lade-Animation.
Kaj

Da kann ich voll und ganz zustimmen. Ich glaube nicht, dass es gut gelaufen ist, wenn es so springt.
Die kommunistische Ente

2

Auf iPhone- und Android-Plattformen müssen Sie alle Texturen und Sounds laden. Das Laden von Texturen und Sounds ist auf alten Telefonen wie iPhone 2G, 3G oder G1 sehr langsam. Du kannst es nicht im Spiel machen.


2

Wie andere bereits gesagt haben, haben Sie eine viel bessere Leistung, wenn Sie alle Daten eines Levels laden können, bevor Sie mit dem Spielen beginnen. Es ist eine häufige Ursache für Probleme beim Laden von Assets während des Spiels.

Häufige Aufgaben während eines Ladebildschirms sind ein statisches Hintergrundbild, ein sehr einfaches Level, einige Tipps und Tricks zum Spielen, schnelle Animationen usw.

Hier ist der Ladebildschirm für APB. Ziemlich verdammt cool. :) http://www.youtube.com/watch?v=p5STix1t_1E&feature=related

Hier ist ein Pseudocode zum Anzeigen eines Fortschrittsbalkens in einem Ladebildschirm:



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);
  }
}

Ugh, gezwungen zu verwenden! = Weil es das Code-Rendering abgebrochen hat, als ich <verwendet habe


1
Wow, APB Ladebildschirme sehen wirklich cool aus :)
Bryan Denny

Wenn Sie Ihren Code mit vier Leerzeichen einrücken, anstatt die <pre> <code> -Tags zu verwenden, können Sie <anstatt! = Verwenden, ohne die Formatierung zu unterbrechen.
mmyers

mmyers, ja, aber das ist ein großer Schmerz im Arsch. Warum gibt es nicht nur ein benutzerdefiniertes Code-Tag?
Srekel

1

Ladebildschirme können verwendet werden, um so ziemlich alles zu verbergen. Laden von Assets, Herstellen von Verbindungen (TCP usw.), Auffüllen von Karten mit Spielobjekten und Initialisieren.

Ich tendiere dazu, Dinge zu erledigen, indem ich eine Art Asset-Manager (oder vielleicht einen Manager für jeden Asset-Typ - Sounds, Grafiken usw.) habe und sie das laden lasse, was in den Speicher geladen werden soll. Dann lassen Sie Ihr Spiel einfach Referenzen aus den Managern ziehen.

Das Anzeigen eines Fortschrittsbalkens, das Bestimmen, was vorab geladen werden soll usw. scheint von Ihrem Projekt, den Ladezeiten und Ihrem Geschmack abhängig zu sein. Fortschrittsbalken sind schön, wenn sie genau sind und es eine lange Last ist (es ist schön zu wissen, wie lange Sie warten müssen).

Auf meinem Android-Handy bevorzuge ich Apps mit einem eigenen, geschmackvoll gestalteten Ladebildschirm. Es wird keine Leiste benötigt, aber die Animation teilt dem Benutzer mit, welche Programme funktionieren. Ich glaube, Android hat eine Standard-Leiste, die Sie verwenden können, die den Job gut macht.

Hier ist eine SO-Frage, die Sie interessieren könnte.


1

Es ist zu beachten, dass für Plattformen mit Qualitätskontrollanforderungen (z. B. X360, PS3, DS usw.) eine Animation in Ihrem Ladebildschirm erforderlich ist (oder in der Tat jeder Bildschirm, der länger als einige Sekunden statisch bleibt) ).

Dies liegt daran, dass der Benutzer andernfalls möglicherweise den Eindruck hat, dass Ihr Spiel abgestürzt ist, obwohl das Laden in der Tat nur eine lange Zeit in Anspruch nimmt. Auch wenn dies keine Voraussetzung ist, würde ich es auf jeden Fall raten.

Jede Art von Animation ist in Ordnung, aber ein einfacher Fortschrittsbalken ist möglicherweise nicht die beste, da große Schritte beim Laden dazu führen können, dass sich der Fortschrittsbalken eine Weile nicht bewegt, was bedeutet, dass der Bildschirm genauso statisch ist, als wäre er vorhanden überhaupt keine Bar. Es ist besser, ein sich ständig bewegendes Bild, wie ein rotierendes Symbol, zusätzlich zu einer Fortschrittsanzeige anzuzeigen.


1
Wenn der Loader asynchron lädt, sollten Sie in der Lage sein, den Fortschritt abzufragen, damit Sie den Prozentsatz genauer aktualisieren können. So kann der Spieler weiß , dass , wenn es nicht in einem Prozentsatz etwas stecken ist eigentlich falsch. Wie ich bereits an anderer Stelle sagte, aktualisieren Sie die Animation nicht, ohne mit Ihrem Ladethread zu prüfen, ob sie noch ausgeführt wird, oder Sie werden sich glücklich drehen, während das Spiel effektiv abstürzt.
Kaj

1

Für die Ladebildschirme in Conquest habe ich ein paar Missionsbeschreibungen (was für ein Spieltyp es war, sowie ein paar Handlungsanweisungen für die Mission) und eine grundlegende Hilfe zu den Befehlen beigefügt.

Im Hintergrund lud ich Geräusche. Die Grafiken wurden alle nach Bedarf geladen, und das schien für unser Spiel ziemlich gut zu funktionieren, aber die Sounds waren ein Bär, also habe ich alle für die Mission erforderlichen Sounds vorgeladen. Die Schaltfläche Laden / Starten ist deaktiviert, bis alles geladen ist, aber ich habe keine Art von Animation (was eine gute Sache wäre, hinzuzufügen).

Dies ist unser erstes Spiel, also lernen wir noch viel, aber das hat bisher für uns in Ordnung geklappt.

Ladebildschirm der Eroberung

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.