Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

04.02.2013, 16:56

Wie erstellt man einen Ladebildschirm?

Ich möchte einen Ladebildschirm in mein Spiel einbauen. Der Ladebildschirm soll nur aus einem einfachen Bild oder einer kleinen Animation bestehen die solange abgespielt wird bis das Level startet. Im Moment habe ich noch keine Levels in mein Spiel eingebaut. Das Hauptspiel startet einfach nachdem man im Menü die entsprechende Taste gedrückt hat.
Wie gehe ich jetzt vor wenn ich einen Ladebildschirm in meine GameStates einbauen möchte? So sehen meine GameStates aus: GameStates
Wie weiß der Ladebildschirm wann er verschwinden soll? Ich habe leider keine Ahnung wie man sowas macht ?(
Sollte ein Ladebildschirm nur vor dem Hauptspiel angezeigt werden oder wann sollte man den noch anzeigen?
Außerdem möchte ich keine Prozent-Anzeige in meinem Ladebildschirm, das brauche ich nicht für mein kleines Projekt.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

04.02.2013, 17:02

Wie weiß der Ladebildschirm wann er verschwinden soll?

Na, wenn das Spiel fertig geladen hat.
Oder soll das ein Fake-Ladebildschirm werden, der nur so tut, als ob irgendetwas geladen würde?
(hab ich früher in meinen allerersten Spielen gemacht, damit es cool wirkt :D)

Yannic

unregistriert

3

04.02.2013, 17:08

Du kannst natürlich auch alle zu ladenden Objekte gewichten und daran (bzw.auch einfach nicht gewichten und alle gleich zählen) eine Prozentzahl des Geladenen festmachen.
Komischerweise funktioniert das in vielen berühmten Spielen teilweise unnachvollziehbar. ;)

FSA

Community-Fossil

  • Private Nachricht senden

4

04.02.2013, 17:21

Ich habe eine Funktion SetGameState. Darin rufe ich (wenn es denn gewollt ist) LoadScreen->Render(...); auf. Dann lade ich alle Daten (Einfach das Init der jeweiligen Klasse). Wenn alles fertig geladen hat, rendert die Game-Loop einfach wieder über den Ladebildschirm.
Edit: Wenn du natürlich eine Animation willst, musst du öfters Rendern.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

04.02.2013, 17:22

@Yannic:
Er hat doch extra geschrieben, dass er keine Prozentanzeige will.
Ich glaube, sein Problem ist viel viel viel grundlegender ...

Yannic

unregistriert

6

04.02.2013, 17:28

@David
"natürlich *auch*"
Also ich hab das früher mit den Ladebildschirmen nicht verstanden, weil ich da auch kein richtiges Ressourcenmanagement oder überhaupt ne Architektur hatte.
Diese Game States find ich jetzt aber auch nicht so toll^^

@TE
Du solltest dir klarmachen, wozu ein LADEbildschirm überhaupt da ist, wozu du ihn brauchst und was du machst während er erscheint, denn ein Ladebildschirm wird logischerweise so lange angezeigt, wie geladen wird.
Eventuell möchtest du aber auch nur eine hübsche Grafik, die solange angezeigt wird, wie kein bestimmter Knopf gedrückt wurde?

:thumbup:

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

04.02.2013, 18:13

Ich glaube die Frage nach dem *Was* hat er eigentlich schon geklärt, Yannic, aber stattdessen die Frage nach dem *Wie* gestellt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

8

04.02.2013, 19:06

Um ehrlich zu sein: ich denke nicht, dass du einen Ladebildschirm wirklich _benötigen_ wirst, allerdings will ich dich auch nicht davon abhalten, einen zu realisieren, da du so wahrscheinlich weitere Erfahrungen sammeln wirst

Da du nicht weißt, wie du an die Sache ran gehen sollst, schließe ich einfach mal darauf, dass du noch nicht über die notwendigen Kenntnisse verfügst und dir diese vorher erst aneignen musst.
Man könnte entweder versuchen, das Laden der Ressourcen in mehrere kleine Schritte aufzuteilen, sodass der Ladebildschirm während des Ladens ohne tatsächliche Parallelisierung und somit ohne größeren Aufwand gezeichnet werden kann. Je nachdem, wie viele Ressourcen du laden musst, kann es sein, dass sich das nur schwer umsetzen lässt oder dass der Ladebildschirm nicht oft genug (50-60 Mal je Sekunde) gezeichnet wird.
Alternativ könntest du das Laden der Ressourcen mit Hilfe der Parallelisierung angehen. Ein Thread oder Task lädt die Ressourcen und der andere kümmert sich um das Zeichnen des Ladebildschirms, bis alle Ressourcen geladen wurden. Allerdings ist diese Variante komplizierter, da man nicht einfach nur einen Thread starten braucht, sondern man zyklisch den Status abfragen muss, die Ressourcen müssen nach dem Laden an die richtigen Variablen zugewiesen werden etc. ...
Wenn du nicht weißt, wie du dies mit Parallelisierung angehen sollst, dann solltest du am besten auf eigene Faust im Internet nach Tutorials oder ähnlichem suchen. Suchegriffe dafür sind beispielsweise "Multithreading", "Parallelisierung", "Nebenläufigkeit", "Threadsicherheit", "Threadsynchronisierung" [Nachtrag: "Asynchronous"] usw., immer in Kombination mit der verwendeten Programmiersprache und/oder dem verwendeten Framework.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sacaldur« (04.02.2013, 19:28)


FSA

Community-Fossil

  • Private Nachricht senden

9

04.02.2013, 19:13

@Sacaldur: Man könnte es sich auch einfacher machen, indem man mit CreateThread einen Thread erstellt und dort immer den Ladebildschirm rendert :D
*Haut mich dafür*
So habe ich es eine Gewisse Zeit gemacht. Und ich würde es wieder machen(der Einfachheit halber). Ich meine aber, dass das für den Anfang ausreicht.

C-/C++-Quelltext

1
CreateThread( NULL , 0 , (LPTHREAD_START_ROUTINE)RenderLadebildschirm , 0 , 0 , NULL );

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

04.02.2013, 19:14

Das Stichwort "Asynchronous" ist gerade sehr in Mode und sollte in obiger Liste daher nicht fehlen. Falls es C++ sein soll, werf ich einfach mal std::async in den Raum, für C# (.NET) gibts was ähnliches.

Was CreateThread() betrifft, sollte man wohl darauf hinweisen, dass man unter MSVC in der Regel _beginthreadex() oder std::thread verwenden sollte, da die direkte Verwendung von CreateThread() in einem typischen Projekt, welches die CRT verwendet, potentiell zu Memory Leaks führen kann...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (04.02.2013, 19:21)


Werbeanzeige