JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Spielschleife für Bildschirmschoner

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
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

BeitragVerfasst am: 12.09.2005, 18:09    Titel: Spielschleife für Bildschirmschoner Antworten mit Zitat

Hi,
ich bin gerade damit beschäftigt mir einen neuen Bildschirmschoner zu machen. Jetzt wo ich VC++ .net hab geht das ja Very Happy .
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 Question
[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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
Patrick
Dark JLI Master



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

BeitragVerfasst am: 12.09.2005, 18:25    Titel: Antworten mit Zitat

GetMessage benutzen und Programm Timer (WM_TIMER) auf 33 Milisekunden setzen Wink Hab auch schonmal so nen Screensaver gemacht. So haste dann kein while(true) mehr Wink
_________________
'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
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 12.09.2005, 18:33    Titel: Antworten mit Zitat

Danke, ich werd's ausprobieren.
Nachrichtenverarbeitung kann schon ne feine Sache sein Wink .
_________________

Ich bin da, wer noch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
Patrick
Dark JLI Master



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

BeitragVerfasst am: 12.09.2005, 19:57    Titel: Antworten mit Zitat

Wegen WM_TIMER:
http://www.jliforum.de/board/viewtopic.php?t=3303&postdays=0&postorder=asc&highlight=wmtimer&start=15

Hatte damals da Code gepostet Smile So wirds gemacht Wink
_________________
'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
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 12.09.2005, 20:10    Titel: Antworten mit Zitat

Mist,
jetzt hab ich mir das gerade schon bei MSDN erarbeitet Rolling Eyes .
Naja, trotzdem danke.
Funktioniert einwandfrei Very Happy .
_________________

Ich bin da, wer noch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 13.09.2005, 14:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 13.09.2005, 14:35    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



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

BeitragVerfasst am: 13.09.2005, 14:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 13.09.2005, 16:43    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



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

BeitragVerfasst am: 13.09.2005, 17:11    Titel: Antworten mit Zitat

AFE-GmdG
Das geht aber nicht überall, das ist so unsicher wie die "Framebremse"
_________________
'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
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 13.09.2005, 17:30    Titel: Antworten mit Zitat

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 Rolling Eyes .
Aber ich veröffentliche den ja eh nicht.
Danke für die ganzen Antworten.
_________________

Ich bin da, wer noch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
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