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

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

11

18.10.2011, 15:46

Kommt drauf an was du genau machst. Wenn du jetzt bei deinen Inits den Bildpuffer leerst könnte das ein Grund sein.
„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.“

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

12

18.10.2011, 15:49

Wie bei meinen Inits den Bildpuffer Leerst?
Ich leere den nur in Render sonst nirgendswo. In Init wird einfach nur die Textur geladen.
Danke

Zitat

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

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

13

18.10.2011, 17:06

Also ich habe jetzt nochmal alles durchgeguckt aber nirgendswo wird der Bildpuffer geleert. Also kann es doch nicht sein das der Ladebildschirm immer nur kurz aufblitzt wenn alles fertig ist! Schließliech wird ja direkt nach Init Render aufgerufen!
Bitte um Hilfe.
Danke
MfG

Zitat

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

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

14

18.10.2011, 20:48

So bin jetzt nochmal alles durch gegangen, habe übrigens vergessen zu erwähnen das ich immernoch mit der TriBase experimentiere^^.
Also habe jetzt herausgefunden das es nicht an den init opder exit methoden liegt.
Selbst wenn ich nach dem Render aufruf nur ein Sleep einbaue bleib der Bildschirm schwartz! Und danach kommt das Bild!!!
Das darf doch nicht Sein oder?
Ich glaube ich bin echt langsam zu Blöd ein LadebIldschirm zu schreiben!
Danke
Bitte Helft einem verzweifeltem Menschen!
Danke, Danke^^
MfG

Zitat

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

15

18.10.2011, 21:18

Zeigst du das gerenderte Bild dann auch mit Present/Display oder wie auch immer es heißt, an?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

16

19.10.2011, 00:25

Setz doch ansonsten mal in deiner Ladebildschirmanzeigefunktion nen Breakpoint. Dann kannst du gucken ob die Methoden überhaupt so aufgerufen werden.
„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.“

Bösewicht

unregistriert

17

19.10.2011, 04:07

Hab jetzt alles nur kurz überflogen...

Also ich hab einen ganz guten und zuverlässigen Ladebalken so hinbekommen:

Jeder Gamestate hat ein bestimmtes Verzeichnis mit seinen Daten.
Wenn nun ein State geladen wird, wird zuerst die Anzahl der sich im Verzeichnis befindlichen Dateien abgefragt,
dann wird der Prozentteil pro Datei berechnet und nach jeder geladenen Datei addiert. Dabei wird die gesamte Init Methode des Gamestates in einen Thread ausgelagert, der nach
erfolgreichem Laden einen festgelegten Wert zurückgibt. Solange die Initmethode läuft wird derweilen in einem anderen Thread der Ladebalken in der Größe der bereits geladenen Prozente angezeigt.

Ist eigentlich eine recht simple Methode, besser wäre es, wenn die Prozente nach der Dateigröße berechnet würden und nicht nach Anzahl, war mir aber dann doch zu aufwändig.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

18

19.10.2011, 10:20

OK also ich habe gestern noch rumexperimentiert. Ich habe einfach alles mal in die Render Methode geschrieben. Also wenn setgamestate aufgerufen wird, dann wird eine Variable auf true gesetzt und in der Render Funktion wird dann Das Bild angezeigt und dann geladen(also wenn die variable auf true gesetzt wurde). Das war wieder nichts -.-. Aber ich habe den Fehler in der Render Funktion gefunden: Wenn ich einmal render aufrufe und dann sofort lade bin ich ja noch im gleichem Frame! Also habe ich gewartet bis nach dem Rendern 4 Frames vorbeiwahren und dann erst Laden. Und siehe da das Bild war da und es hat geladen! Leider ist das nicht mein Ziel, sondern das dass alles in SetGameState erledigt wird! Dann habe ich mir gedacht mit ner schleife? Habs dann so gemacht:

C-/C++-Quelltext

1
2
3
4
5
for( int i = 0; i<=10; i++ )
    {
        m_pLoad->LoadRender();
    }
// Hier dann laden

Leider ohne erfolg. Ich habe auch schon break points gesetzt allerdings ohne Fehler! Und das Bild braucht anscheinend 1 Frame mehr bevor es angezeigt wird.
Danke
MfG

Zitat

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

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

19

19.10.2011, 16:41

Ich vermute ich weiß woran es liegt. Arbeitest du mit dem Buch von Lennart Steinke? Bei seinem Code wird nicht jeden Durchlauf gerendert. Wenn ein Frame zu viel Zeit benötigt, wird das rendern weggelassen. Dadurch versucht man die Zeit wieder aufzuholen. Bin mir jetzt nicht sicher, da du die Render Funktion ja direkt aufrufst. Kenne den Code der darin liegt jetzt aber nicht. Aber meine Vermutung wäre, dass er nicht rendert, da der vorherige Frame zu lange benötigt. Das würde auch Sinn machen, da nach 4 Frames warten ja anscheinend gerendert wird. Ich vermute irgendwo da liegt dein Problem.

edit:
Was heisst Breakpoints ohne Fehler? Wird die Funktion LoadRender() nun aufgerufen oder nicht? Wenn du darin den Breakpoint setzt, wird dieser dann auch aufgerufen?
Die Schleife ist quatsch. Ich vermute fast, dass der wechsel der Buffer vielleicht nicht in dieser Funktion passiert, sondern erst beim nächsten Rendern. Dann würde auch mein oben beschriebenes Problem Sinn machen.
„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.“

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

20

20.10.2011, 17:23

Nein ich arbeite mit der TriBase also David Scherfgen ;) ( zumindest mal zur abwechslung ) Siehe Thread 14 ^^
Das mit den Buffer macht sin das das erst in der Render Funktion passiert denn es wird erst angezeigt wenn das nächstes mal Render aufgerufen wird ( also die Funktion ). Wärend dem Laden steht ja alles still O.O :)
Das mit den Break Points: Ja die werden ausgeführt. Also kann es nur an dem Buffer liegen oder?
Wenn ja wie könnte man es Lösen denn ich habe so langsam echt kein Plan mehr :)
Danke
MfG

Zitat

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

Werbeanzeige