Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 10.11.2004, 19:16 Titel: Ein Bild für eine bestimmte Zeit anzeigen. |
|
|
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 |
|
 |
Fallen JLI MVP


Alter: 41 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 10.11.2004, 19:31 Titel: |
|
|
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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 11.11.2004, 15:17 Titel: |
|
|
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 |
|
 |
nigs Super JLI'ler
Anmeldedatum: 19.12.2002 Beiträge: 359
Medaillen: Keine
|
Verfasst am: 11.11.2004, 15:56 Titel: Re: Ein Bild für eine bestimmte Zeit anzeigen. |
|
|
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
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 ), 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
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
EDIT: Grrgrrr, da schreibt man so nen Text, und dann kommt jemand zuvor *Sebel-wetz*  |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
|
Nach oben |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 11.11.2004, 21:38 Titel: |
|
|
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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 11.11.2004, 21:41 Titel: |
|
|
also zumindest ein deutliches flimmern sollte man sehen _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 11.11.2004, 22:09 Titel: |
|
|
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  _________________ 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 |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 13.11.2004, 15:46 Titel: |
|
|
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?  |
|
Nach oben |
|
 |
C++Builder Senior JLI'ler

Anmeldedatum: 04.10.2003 Beiträge: 235
Medaillen: Keine
|
Verfasst am: 13.11.2004, 21:57 Titel: |
|
|
Hast du bevor die Wartezeit beginnt die Buffer geflippt? |
|
Nach oben |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 14.11.2004, 00:08 Titel: |
|
|
Ä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.
Ähm, also das müsste ich nochmal testen.
Meinst du daran liegt es also das es nicht angezeigt wird? |
|
Nach oben |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 14.11.2004, 00:15 Titel: |
|
|
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 |
|
 |
C++Builder Senior JLI'ler

Anmeldedatum: 04.10.2003 Beiträge: 235
Medaillen: Keine
|
Verfasst am: 14.11.2004, 12:34 Titel: |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 14.11.2004, 14:19 Titel: |
|
|
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 |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 14.11.2004, 14:47 Titel: |
|
|
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...  |
|
Nach oben |
|
 |
|