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

21.07.2013, 18:25

[C++ / Sfml ] Splashscreen

Nabend,

Ich hab mich mal wieder etwas an C++ rangewagt , dafür habe ich die Libary "SFML 2.0" herangezogen und mich daran versucht etwas auf die Beine zu stellen.

Soweit hat das auch erstma geklappt, jetzt steh ich aber vor folgendem Problem:

Am Anfang soll ein Logo/Splashscreen lamsang eingeblendet werden. von einem schwarzen Bildschirm aus soll das logo quasi "einfaden".

Wenn ich das mit einem Keyboard Event mache geht auch alles zb. Drücke Enter dann erscheint das Logo, jedoch soll es von selbst starten und da stoße ich nun auf mein Problem.
Bevor ich mein Fenster überhaupt zu Gesicht bekommen habe ist das Logo schon vollkommen sichtbar, anders gesagt es wird schon eingeblendet wenn mein Fenster noch lädt.
Hoffe man versteht so ungefähr was ich meine.

Gibt es eine Möglichkeit zu checken ob die Anwendung schon vollkommen geladen ist?
Ich könnte einen Timer einbauen und es erst nach 2 sek einblenden , aber das ist wohl keine gute Idee falls es bei jemandem länger laden muss.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Dontyousay« (21.07.2013, 19:06)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

21.07.2013, 18:53

Bitte, bitte lass das sein! Ich hasse nichts mehr als diese dämlichen Splashscreens. Vergiss es einfach. Wenn du es nicht lassen kannst, dann zerstöre deinen Rechner und besorge dir nie wieder einen neuen. BITTE
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

3

21.07.2013, 19:11

Zitat

Bitte, bitte lass das sein! Ich hasse nichts mehr als diese dämlichen
Splashscreens. Vergiss es einfach. Wenn du es nicht lassen kannst, dann
zerstöre deinen Rechner und besorge dir nie wieder einen neuen. BITTE
Was ist den so schlimm daran?
Das is ja genauso wie zu sagen " Ach ich hasse diese Hauptmenüs, kann man die nichmal abschaffen?" xD

Für mich ist das ja immoment nur etwas spielerei und kein "ernstes" Projekt.
Aber größere Projekte und Spiele haben alle eine einblendung des Logo´s am Start. Kann man ihnen ja wohl auch nicht übel nehmen, die wollen ja schließlich das man sieht wer das gemacht hat.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

4

21.07.2013, 20:04

Das sieht man auch wenn das Logo im Hauptmenü eingeblendet wird.
Und nein, kannst du nicht sagen. Denn das Hauptmenü ist meist einfach notwendig. Wenn das nicht funkioniert kannst du nicht spielen. Wenn der Splashscreen nicht existiert oder angezeigt wird interessiert sich kein Schwein dafür. Niemand wird deswegen eine Supportanfrage stellen.

Ich find es einfach schrecklich, dass angehende Spieleentwickler schon so früh mit einem solchen Scheiß anfangen. Was bringt dieser Splashscreen dem Spieler? Sind Spiele ohne Splashscreen schlechter? Nein! Sie können nur besser sein. Als Spieler will ich spielen und mir keine Logos anschauen müssen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

5

21.07.2013, 23:05

Bitte, bitte lass das sein! Ich hasse nichts mehr als diese dämlichen Splashscreens. Vergiss es einfach. Wenn du es nicht lassen kannst, dann zerstöre deinen Rechner und besorge dir nie wieder einen neuen. BITTE

Ich find es einfach schrecklich, dass angehende Spieleentwickler schon so früh mit einem solchen Scheiß anfangen.

Ähm...ja, der arme Fragesteller...

Ich bin ja jetzt nicht so der Experte hier im Forum, stelle eigentlich nur hin und wieder meine kleinen Fragen und das wars, aber ich finde es ist unangebracht so auf Posts zu reagieren. Bekomme ich immer einen "Scheiße! Nein!"-Aufschrei wenn ich etwas frage, dann werde ich über kurz oder lang einfach nichts mehr fragen und mir die Nerven sparen. Es geht soweit ich das mitbekommen habe primär darum, Leuten, die Fragen haben, nach bestem Wissen zu helfen, wenn keiner mehr fragen will, weil die Gefahr solcher Antworten die Mühe nicht wert ist, dann hat das Forum das Ziel doch leicht verfehlt.

Es tut mir leid das dieser Post hier auch nicht konstruktiv zum Thema beitrug, aber bitte, sowas muss doch wirklich nicht sein. Jeder kann einfach den Post wegklicken und die Sache hat sich, aber das man dann gleich wie im ersten Zitat reagiert...na ich weiß ja auch nicht.

Lg, ich hoffe du bekommst noch eine hilfreiche Antwort Dontyousay
Hans_Peter

Stazer

Alter Hase

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

6

21.07.2013, 23:06

Setz den Alphawert deiner Sprite anfangs auf null, so dass sie nicht sichtbar ist.
Mit Hilfe von sf::Clock und getElapsedTime erhöhst du diesen Wert nach einer bestimmten Zeit um eins und zum Schluss setzt du den Timer mit reset zurück.
Den passenden Wert musst du ausprobieren.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sf::Clock timer;
sf::Sprite sprite;

//...

sprite.setColor (sf::Color (255, 255, 255, 0));

// gameloop
while (window.isOpen ())
{
    if (timer.getElapsedTime ().asMilliseconds () > 10 && sprite.getColor ().a < 255)
    {
        sf::Color color = sprite.getColor ();
        color.a += 1 ;
        sprite.setColor (color);
        timer.reset ();
    }
}


So in etwa kann ein Splashscreen funktionieren.

Freundliche Grüße
Stazer

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

21.07.2013, 23:26

Ich kenne als Splashscreen eigentlich diese Rahmenlosen Fenster, welche Logos etc anzeigen. Sieht man zum Beispiel bei den Adobe Produkten. Das erreichst du wie gesagt durch ein Rahmenloses Fenster. Du könntest am Anfang so ein Fenster erstellen und dann in der Zeit den Rest deines eigentlichen Spiels laden. Wenn du mit Splashscreen das meinst, was in Spielen oft verwendet wird wie zum Beispiel diese NVidia Screens (gibts natürlich viele andere), dann brauchst du dafür kein gesondertes Fenster. Wie du den Fade-In erledigst wurde ja bereits erklärt.
Um nun deine Daten zu laden solltest du einen anderen Thread benutzen. Bei der Variante mit Fade-In musst du dann ein wenig gucken. Du willst ja eigentlich, dass der Screen wechselt sobald das Logo voll eingeblendet ist. Es ist aber nicht sichergestellt, dass jetzt schon alle Daten geladen sind. Willst du den Screen nur aus "Schönheitsgründen", so reicht es natürlich dein Logo einzublenden und dann zum nächsten Screen zu wechseln. Hier lädst du jetzt als nächstes deine Benötigten Daten. So ist dein "Splashscreen" nicht dafür gedacht etwas anzuzeigen während Daten geladen werden, sondern wie bereits geschrieben einfach eine Schönheitsgeschichte.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

8

21.07.2013, 23:29

@Stazer: Danke habs mit der hilfe des Codes jetzt hingekriegt.


@NachoMan:

Der Splashscreen hat keinen Sinn für den Spieler außer vielleicht die Macher des Spiels zu kennen. Der Zweck liegt bei der Firma um sich zu "präsentieren".
Auch gebe ich gebe dir den Punkt das man als neuling für sein kleines Spiel so etwas nicht braucht bzw. ein Firmenlogo für eine 1-Mann-Armee eher überflüssig ist.

Allerdings ist es unabhängig von einem fertigen "Produkt" seh wohl sinnvoll für Anfänger, denn so wie es bei mir der Fall ist fangen die meisten erst einmal an kleine Sachen zu schreiben.
Dabei ist der Splashscreen der perfekte einstieg es geht darum erstmal nur ein Bild auf den Bildschirm zu packen, erst im anschluss wird sich um das Menü gekümmert, welches ja dann schon eine etwas größere Herausforderung für Neulinge darstellt.

@Schorsch:

Es handelt sich nur um ein "Schönheitsding" , also nicht wie bei Adobe/Autodesk/Microsoft Office Produkten sondern eher in richtung Nvidia/EA/Nintendo logo beim N64 start.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Dontyousay« (21.07.2013, 23:46)


9

22.07.2013, 01:29

Tut mir leid für den Doppelpost aber eins muss ich noch fragen:

Mit dem zusätzlichen Timer wie bei Stazers Code klappt das alles, ich habe auch das Problem herausgefunden.

Damit ich keine performance unterschiede habe habe ich den Fade so gelöst:

C-/C++-Quelltext

1
alpha += CFramework::Get()->elapsedFrameTime.asSeconds() * Speed;


Das Problem ist das es mir vorkam als ob es schon während sich das fenster "initialisiert" eingeblendet hat war das der erste Frame sehr sehr lang war und dadurch gleich einen riesigen Alpha wert hinzugefügt hat.
Ist das den normal ? Das der erste Frame 100x länger ist als die späteren?

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

10

22.07.2013, 03:02

Das Problem ist das es mir vorkam als ob es schon während sich das fenster "initialisiert" eingeblendet hat war das der erste Frame sehr sehr lang war und dadurch gleich einen riesigen Alpha wert hinzugefügt hat.
Ist das den normal ? Das der erste Frame 100x länger ist als die späteren?
Bis alles rund um das Fenster und OpenGL initialisiert ist, vergeht halt immer einen kurzen Augenblick und dies wird von PC zu PC verschieden sein. Eine wirkliche Lösung gibt so an sich nicht. Ein mehr oder weniger hässlicher Trick wäre am Anfang kurz sf::sleep(sf::miliseconds(500)); aufzurufen um dem System eine halbe Sekunde Zeit zugeben sich zu fangen.

Um den User weniger zu nerven mit der Splashscreen, solltest du es wegklickbar machen oder eine Option anbieten um es ganz zu verhindern.
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

Werbeanzeige