GAMELOOP in MFC
-
Hi ihr Nachtprogger ;)..ich poste dies hier auch mal im MFC Forum, weil ich es vorher ins Spieleforum gepostet habe *lol
..habe schon ein ein paar Sachen mit DirectDraw7 geproggt,
allerdings nur im Fullscreenmodus. Nun möchte ich einen Spiele-Editor
schreiben, und habe mich entschieden auf MFC umzusteigen. Das kann ja nicht so schwer sein, DACHTE ich, da ich ja vorher auch supi mit DirectDraw7 klargekommen bin! Aber ich bekomme nichtmal nen einfaches Fenster hin,
auf dem ein Bitmap geblittet wird. Habe schon etliche Tutorials durch, komme aber nicht weiter! Das eigentliche Problem ist nicht directdraw, sonder das erstellen eines Game-Loops in MFC. Habe DirectDraw successfully initialisiert,
aber nun muss ich irgendwie ne Heartbeat Funktion haben.Habe nach eingen Tutorials folgende Lösung:
Initialisierung - Das funktioniert einwandfrei
BOOL CEditorApp::InitInstance() { AfxEnableControlContainer(); // *** MEINE INTIALISIERUNG *** initDDraw(AfxGetMainWnd()->GetSafeHwnd()); }Nun die Hearbeatfunktion. Habe von CWinApp die OnIdle funktion überladen und in dieser meine Heartbeatfunktion aufgerufen!
class CEditorApp : public CWinApp { public: CEditorApp(); // Überladungen // Vom Klassenassistenten generierte Überladungen virtueller Funktionen //{{AFX_VIRTUAL(CEditorApp) public: virtual BOOL InitInstance(); virtual BOOL OnIdle(LONG lCount); //}}AFX_VIRTUAL // Implementierung //{{AFX_MSG(CEditorApp) // HINWEIS - An dieser Stelle werden Member-Funktionen vom Klassen-Assistenten eingefügt und entfernt. // Innerhalb dieser generierten Quelltextabschnitte NICHTS VERÄNDERN! //}}AFX_MSG DECLARE_MESSAGE_MAP() };BOOL CEditorApp::OnIdle(LONG lCount) { CWinApp::OnIdle(lCount); heartBeat(); return TRUE; }Aber die OnIdle Funktion wird garnicht aufgerufen! Weiss jemand wie es richtig geht, oder hat jemand schon Erfahrung mit Spielen in MFC und kann mir eine Alternative/Beispiel posten ? Das wäre echt MASTA-HILFREICH!
Vielen Dank im voraus

-
Was willst du genau. Wenn du es mit DX machen willst gehörst du ins Spieleforum.
Wenn du ein Programm erstellst hast du ein Grundskelett dieses. Die MessageLoop ist da bereits drin. Solange du im HauptThread keine Berechnungen machst wird diese auch die Nachrichten bekommen. (GUI trennt man sowieso von Funktionalität)
-
Was ich genau will ? Steht doch oben im Text! Ich suche einen Einstiegspunkt
in dem MFC-Grundgerüst, wo ich zusätzlich zur repitierenden Messagebehandlung
meine Heartbeatfunktion inkludieren kann! Wenn du mich schon belehren willst, dann bitte mit einem Beispiel, und nicht mit so was wie "Ähhhm..das gehört aber nicht
hierhin!"! Habe es ja ZUSÄTZLICH auch nochmal im Spieleforum, falls du es gelesen hättest! Dachte hier wäre das MFC-Forum...und das ist doch EINDEUTIG eine
MFC-pezifische Frage!
MFG
Finalbrain
-
Meinst du evtl. einen Timer ?
Devil
-
Ich kenne mich mit deinen Ausdrücken nicht aus. Scheinbar im MFC niemand.
Was ist eine Heartbeatfunktion?Weiters habe ich dir gesagt was zu tun ist. Welchen Code sollte ich also posten.
Die MFC stellt ein Grundgerüst einer Windowsanwendung (SDI,MDI,Dialog) zur verfügung. Diese beinhalten eine MessageLoop.
Wenn du darin etwas Zeichen willst dann in z.B. OnPaint.
Wenn du komplexere Sachen machen willst brauchst du dann eine Thread den du z.B. in OnInitInstanz starten kannst.
-
danke für deine Antwort...weil genau diesen MessageLoop(Heartbeatfunktion)
suche ich..weil ich da keinen gefunden habe wie in normaler Win-API. Werde das mal mit der OnPaint-Methode versuchen. Ansonsten meinst du einen Thread starten.....kannst du mir ein Beispiel geben, wie man einen Thread startet, weil cih neu in der Windows programmierung bin und sonst nur threads unter unix gemacht habe..(Fork() etc...)Gruss
Finalbrain

-
Die MessageLoop ist in der MFC-BIB drin. Da musst du schon die MFC-Klasse durchgehen.
Selbst kann man das mit
http://www.c-plusplus.net/forum/viewtopic.php?t=39085Zu Threads findest du auch was in der FAQ
-
Vielen Dank, werde es ausprobieren!

Greetz from Finalbrain
