JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=dcd6123d08031ac041e051f02cc5df75Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Ein Bild für eine bestimmte Zeit anzeigen.
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 10.11.2004, 19:16    Titel: Ein Bild für eine bestimmte Zeit anzeigen. Antworten mit Zitat

Hallo,
ich möchte intromäßig ein Bild anzeigen. Aber nur für eine bestimmte Zeit.
Die Zeitbegrenzung möchte ich möchte ich mit Hilfe einer for-Schleife machen.
Geht das überhaupt? Oder wie könnte ich es sonst machen?

So sieht das bisher aus:
Code:
int zaehler;

for (zaehler=0; zaehler < 10000; zaehler++)
   {
      DD_Lock_Back_Surface();
      BITMAP_IMAGE logo;
      Load_Bitmap_File(&bitmap8bit, "Bild02.bmp");
      Set_Palette(bitmap8bit.palette);
      Create_Bitmap(&logo, g, h, 127,127);
      Load_Image_Bitmap(&logo, &bitmap8bit,0,0, BITMAP_EXTRACT_MODE_CELL);
      Unload_Bitmap_File(&bitmap8bit);
      Draw_Bitmap(&logo,back_buffer, back_lpitch,0);
      Destroy_Bitmap(&logo);
      DD_Unlock_Back_Surface();

   }


Die Zeitverzögerung geht auch schon irgendwie, aber das Bild wird auch nicht angezeigt.

Vielen Dank,
JkerryZ
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 41
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 10.11.2004, 19:31    Titel: Antworten mit Zitat

Mit ner normalen for schleife erreichst du nur wenig. Du brauchst nur nen AlphaWert der mit ner gewissenzeitspanne abnimmt (Alpha-=timeDifference;)

Rendern kannste das dann genauso gut in der GameLoop
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 11.11.2004, 15:17    Titel: Antworten mit Zitat

also es ist extrem böse, ein Bild immer und immer wieder zu laden! Und die Idee mit dem Zähler ist leider auch mies, weil das dann auch jedem Rechner unterschiedlich schnell läuft. Im zweiten Buch steht was über Ressourcenmanagment und Timing, da erfähst du wies besser geht. Im prinzip erst das Bild laden, dann in die GameLoop, und Intro als einen Status machen. Ein Counter addierst du immer fTime, und wenn der über 5 Sekunden ist, schaltest du den Status auf Menü oder Game.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nigs
Super JLI'ler



Anmeldedatum: 19.12.2002
Beiträge: 359

Medaillen: Keine

BeitragVerfasst am: 11.11.2004, 15:56    Titel: Re: Ein Bild für eine bestimmte Zeit anzeigen. Antworten mit Zitat

JkerryZ hat Folgendes geschrieben:
Hallo,
ich möchte intromäßig ein Bild anzeigen. Aber nur für eine bestimmte Zeit.
Die Zeitbegrenzung möchte ich möchte ich mit Hilfe einer for-Schleife machen.
Geht das überhaupt? Oder wie könnte ich es sonst machen?

So sieht das bisher aus:
Code:
int zaehler;

for (zaehler=0; zaehler < 10000; zaehler++)
   {
      DD_Lock_Back_Surface();
      BITMAP_IMAGE logo;
      Load_Bitmap_File(&bitmap8bit, "Bild02.bmp");
      Set_Palette(bitmap8bit.palette);
      Create_Bitmap(&logo, g, h, 127,127);
      Load_Image_Bitmap(&logo, &bitmap8bit,0,0, BITMAP_EXTRACT_MODE_CELL);
      Unload_Bitmap_File(&bitmap8bit);
      Draw_Bitmap(&logo,back_buffer, back_lpitch,0);
      Destroy_Bitmap(&logo);
      DD_Unlock_Back_Surface();

   }


Die Zeitverzögerung geht auch schon irgendwie, aber das Bild wird auch nicht angezeigt.

Vielen Dank,
JkerryZ


Ich habe bei mir in der Loop einen Zeitzähler(timeGetTime()), der immer die aktuelle Zeit in einer Variable(time) speichert.

Und dann kannsts so machen, dass sobald das Bild angezeigt wird, du die aktuelle Zeit in einen Temp-Wert(temp) speicherst.
Dann kannst du das so machen:

Code:
if(time<temp+5000)
{
    Draw();
}



Dann gibt es nur eine Zeitspanne von 5000Millisekunden, inder das bestimmte Bild or whatever gerendert wird.
Und dieser Zeitpunkt fängt genau da an, wenn du die Temp-Variable mit der dort aktuellen Zeit besetzt, und hört wie gesagt 5000Millisekunden in der Zukunft auf. Die 5000Millis sind natürlich die Zeitspanne, wielang das Bild gerendert wird, und somit kannst du das dann entscheiden.

Deine Schleife ist mist Wink
Denn bei dem einen, mit 2ghz cpu wird so ne For-Schleife mit Render-Funktionen vlt. innerhalb von einer halben sekunde ausgeführt, und bei dem nächsten mit nem schwachen 300er in über 5 Sekunden.....
Wenn du das so wie oben machst, sind nicht die Ressourcen des PC, sondern die Zeit abhängig.
Und die ist für sowas eines der besten Maße, da die, zumindest für die User deines Programmes(hoffe mal, die sitzen wahrscheinlich nicht alle in Singularitäten Wink), linear sind.
Für den 300mhz user vergeht die Zeit nicht langsamer wie bei dem 3ghzer, aber beim kompilieren von großen Linux-Paketen mags einem so vorkommen Wink

Außerdem versetzt deine Schleife das ganze Programm in einen Sleep. Für die bestimmte Zeit wird ja NICHTS anderes gemacht als zu rendern. Bei meiner Variante läuft die Game-Loop fröhlichst weiter, und man kann das Keyboard handeln etc..

Hoffe ich konnte helfen Wink


EDIT: Grrgrrr, da schreibt man so nen Text, und dann kommt jemand zuvor *Sebel-wetz* Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 11.11.2004, 16:35    Titel: Antworten mit Zitat

lol
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 11.11.2004, 21:38    Titel: Antworten mit Zitat

Kann das durch dieses 10000 malige rendern sein, dass das Bild durch flimmern (eben das immer wieder neue Rendern) nicht zu sehen ist?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 11.11.2004, 21:41    Titel: Antworten mit Zitat

also zumindest ein deutliches flimmern sollte man sehen
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 11.11.2004, 22:09    Titel: Antworten mit Zitat

JkerryZ hat Folgendes geschrieben:
Kann das durch dieses 10000 malige rendern sein, dass das Bild durch flimmern (eben das immer wieder neue Rendern) nicht zu sehen ist?

Wenn man einen Backbuffer verwendet, sollte da auch kein Flimmern entstehen Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 13.11.2004, 15:46    Titel: Antworten mit Zitat

Jetzt habe ich das mal anders gemacht. Ich habe das Bild rendern lassen und dann eine "Wartezeit" festgelegt bis zum nächsten Schritt.
Doch nun funktioniert zwar das Warten, aber das Bild wird nicht angezeigt.

Woran kann das jetzt noch liegen? Mad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
C++Builder
Senior JLI'ler



Anmeldedatum: 04.10.2003
Beiträge: 235

Medaillen: Keine

BeitragVerfasst am: 13.11.2004, 21:57    Titel: Antworten mit Zitat

Hast du bevor die Wartezeit beginnt die Buffer geflippt?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 14.11.2004, 00:08    Titel: Antworten mit Zitat

Ähhh, nein.

Ich habe das Bild geladen und dann eine Wartezeit laufen lassen. In der nichts neues dazu kommt. Also eigentlich nur das Bild angezeigt wird. Und die Puffer habe ich nicht geflippt.

Edit:
Aso, stimmt die Wartezeit beginnt ja danach. Surprised
Ähm, also das müsste ich nochmal testen.
Meinst du daran liegt es also das es nicht angezeigt wird?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 14.11.2004, 00:15    Titel: Antworten mit Zitat

So, habs gerade mal getestet.
Jetzt wird das Bild angezeigt und es flimmert nicht.
Dafür geht das Bild jetzt nach der Wartezeit nicht weg.
Und der ganze Rest flimmert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
C++Builder
Senior JLI'ler



Anmeldedatum: 04.10.2003
Beiträge: 235

Medaillen: Keine

BeitragVerfasst am: 14.11.2004, 12:34    Titel: Antworten mit Zitat

machs doch einfach so:

Code:


status = INTRO;
StartTime = CurrentTime();

//Hauptschleife
while(true)
{
    if(status==INTRO)
        DrawIntroImage();
    else
    {
         GameMain();
    }

    if(CurrentTime() - StartTime >= 5000)
        status == MAIN;

    Flip();
 
    //Framebremse       
}


status ist halt deine Stausvariable
GameMain() deine ganzes Mainzeux (Input abfragen, Zeux malen ...)
Flip() ist halt der Bufferwechsel
CurrentTime ist halt deine Funktion wo du die Zeit herbekommst
und StartTime ist halt deine Variable die die Startzeit speichert

Das ist dann eine ganz normale gamemain wie ohne Intro nur das halt für ne bestimmte Zeit nix außer das malen des Intros gemacht wird. Natürlich könntest du da noch ne Abfrage einbauen ob der User das Intro abbrechen möchte...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 14.11.2004, 14:19    Titel: Antworten mit Zitat

C++Builder
Framebremsen? Eine Schande für die schönen Frames.... Und von den Nachteilen wollen wir nichtmal reden.

Zum Thema: Wie wäre es mit Threads?
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 14.11.2004, 14:47    Titel: Antworten mit Zitat

Ja, aber wenn ich mir angucke wie er vor hatte das Problem zuerst zulösen, dann glaub ich, dass er noch lange nicht an dem Punkt angelangt ist, an dem es sich lohnt, sich mit Multithreading zu beschäftigen... Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum