Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 12.09.2005, 18:09 Titel: Spielschleife für Bildschirmschoner |
|
|
Hi,
ich bin gerade damit beschäftigt mir einen neuen Bildschirmschoner zu machen. Jetzt wo ich VC++ .net hab geht das ja .
Für die die nicht wissen wie das geht: Ist ganz einfach. Man kompiliert eine *.exe benennt sie in *.scr um und kopiert sie in den Windowsinstallationsordner. Mit VC++ 6.0 Autorenedition geht das natürlich nicht wegen dieser Meldung die beim starten des Programms kommt.
Nun habe ich aber ein Problem: Ein Bildschirmschoner sollte ja nicht mehr CPU-Kapazitäten benötigen als nötig. Aber eine klassische Spielschleife funktioniert ja immer mit while(true). Also werden alle CPU Kapazitäten die nicht für das Programm selbst benötigt werden dafür verschwendet diese while Schleife immer wieder durchzugehen.
Gibt es irgendeine Möglichkeit das zu umgehen
[EDIT]Der Bildschirmschoner ist übrigens animiert also brauche ich mindestens 20 Aufrufe der Schleife (oder was auch immer) pro Sekunde.[/EDIT]
Schonmal Danke im vorraus
MfG
Dr. Best _________________
Ich bin da, wer noch? |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 12.09.2005, 18:25 Titel: |
|
|
GetMessage benutzen und Programm Timer (WM_TIMER) auf 33 Milisekunden setzen Hab auch schonmal so nen Screensaver gemacht. So haste dann kein while(true) mehr _________________ '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 |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 12.09.2005, 18:33 Titel: |
|
|
Danke, ich werd's ausprobieren.
Nachrichtenverarbeitung kann schon ne feine Sache sein . _________________
Ich bin da, wer noch? |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 12.09.2005, 20:10 Titel: |
|
|
Mist,
jetzt hab ich mir das gerade schon bei MSDN erarbeitet .
Naja, trotzdem danke.
Funktioniert einwandfrei . _________________
Ich bin da, wer noch? |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 13.09.2005, 14:31 Titel: |
|
|
hm, es gab auch irgendwo mal n Bildshcirmschoner beispiel, da wurde net einfach ne ganz normale exe gemacht, sondern irgendwie noch angepasster Code, n Framework oder irgend sowas benutzt. hab ich aber auch net kapiert, weils mich eh net so interessiert hat. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 13.09.2005, 14:35 Titel: |
|
|
Jonathan: Bei nem Bildschirmschoner muss man nur die Kommandozeilenparameter berücksichtigen, das ist das wichtigste, ein Framework für Bildschirmschoner kann da einiges erleichtern (das härteste ist wohl das Rendern in die Vorschau).
Patrick: kann man in die Schleife nicht Sleep(0); eintragen um den Prozessor zu entlasten und somit auf dem WM_Timer verzichten? _________________ "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 |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 13.09.2005, 14:58 Titel: |
|
|
Fallen
Was ist denn ein Sleep(0); ? Nichts anderes als eine while schleife die nicht ausgeführt wird. Was haste davon? Gar nichts. Wir das Bild erneuert bei GetMessage dadurch? Nö.
Wenn man keine 100% CPU Auslastung haben will benötigt man umbedingt GetMessage! PeekMessage fragt immer und immer wieder bei jedem Schleifendurchlauf ab --> Endlosschleife.
Bei GetMessage und dem Timer ist es folgendermaßen: Windows erkennt das der Zeitinterval von XXX (Selbstdefinierbar) erreicht ist --> Sendet eine Nachricht an das Programm, GetMessage fängt die auf und dann wird erst das Programm upgedatet. _________________ '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 |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 13.09.2005, 16:43 Titel: |
|
|
Alternativ kannst du auch PeekMessage benutzen, und die Bildwiederholfrequenz mit der Monitorfrequenz syncronisieren. Wenn du normalerweise 600 Frames hast und danach genau 75 ergibt das eine Prozessorlast von gerade mal 10-20%, da er immer auf den Monitor "warten" muss... _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 13.09.2005, 17:30 Titel: |
|
|
Kommt mir auch was unsicher vor mit dem V-sync, und außerdem funktioniert der Timer ja perfekt.
Ich hab den Bildschirmschoner jetzt vorerst fertiggestellt und er funktioniert einwandfrei. War ja nur ein kleines Experiment.
Aber ich hab auch schon festgestellt wozu - zumindest unter anderem - dieser "angepasste code" ist. Meiner wird jetzt immer gestartet wenn die Anzeigeeinstellungen eigentlich nur die Vorschau anzeigen wollen .
Aber ich veröffentliche den ja eh nicht.
Danke für die ganzen Antworten. _________________
Ich bin da, wer noch? |
|
Nach oben |
|
|
|