Setting up classes
Hello programmers!
I am able to program somewhat but I have never really had a good design when it comes to creating classes. I have seen various ways people use. I would like to know if I am on the right track or if I am making things too complicated. Here is what I have thought of:
2 global classes
CApp g_CApp;
CGame g_CGame;
(inside CApp is an instance of a seperate class "CDirect3d", which initialises d3d and holds the pointer to the d3d device)
WinMain
{
create window, pass the HWND handle to g_CApp.SetWindowHandle()
call g_CApp.Init() to initialise the direct3d class
pass pointers over to the game class:
g_CGame.SetDirect3DDevice(g_CApp.CDirect3d.GetDirect3DDevice() )
while g_CApp.IsRunning()
{
// do windows stuff etc
g_CGame.MainLoop() .. now this class can access pDirect3DDevice->Clear(..) etc..
}
}
Does that seem like the correct way to split my functions up in to classes?
Thanks for looking :)
The last game i worked on did something similar to what i have done in my own engine which in turn is pretty similar to what you have done. The main difference being that i instantiate an Engine class and set everything up through that.
Here is the main.cpp of an example Win32 application i hacked together the other day to test my engine out:
Hope that is useful,
Here is the main.cpp of an example Win32 application i hacked together the other day to test my engine out:
#include <Windows.h>#include <mmsystem.h>#include <d3dx9.h>#pragma warning( disable : 4996 ) // disable deprecated warning #include <strsafe.h>#pragma warning( default : 4996 )#include <Lugru.h>Lugru::Engine* g_pEngine( NULL );//-----------------------------------------------------------------------------// Name: MsgProc()// Desc: The window's message handler//-----------------------------------------------------------------------------LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ){ switch( msg ) { case WM_DESTROY: g_pEngine->Stop(); Sleep(100); g_pEngine->CleanUp(); PostQuitMessage( 0 ); return 0; } // We don't want the engine to handle messages until it exists! if ( g_pEngine != NULL ) { Lugru::Engine::AppWndProc( hWnd, msg, wParam, lParam ); } return DefWindowProc( hWnd, msg, wParam, lParam );}//-----------------------------------------------------------------------------// Name: WinMain()// Desc: The application's entry point//-----------------------------------------------------------------------------INT WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR CommandLine, INT Count){ // Register the window class WNDCLASSEX wc = { sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle( NULL ), NULL, NULL, NULL, NULL, L"LugruTestApplication", NULL }; RegisterClassEx( &wc ); // Create the application's window HWND hWnd = CreateWindow( L"LugruTestApplication", L"D3D Tutorial 06: Meshes", WS_OVERLAPPEDWINDOW, 100, 100, 1280, 1024, NULL, NULL, wc.hInstance, NULL ); DWORD a = GetLastError(); // Show the window ShowWindow( hWnd, SW_SHOWDEFAULT ); UpdateWindow( hWnd ); g_pEngine = new Lugru::Engine(); g_pEngine->SetWindowHandle( hWnd ); SetCurrentDirectoryA("F:/Dev/Lugru/Resources"); Lugru::Path::AddSymbolSubstitution("$ENGINE_EFFECTS", "Effects"); Lugru::Path::AddSymbolSubstitution("$ENGINE_MODELS", "Models"); Lugru::Path::AddSymbolSubstitution("$ENGINE_TEXTURES", "Textures"); Lugru::Path::AddSymbolSubstitution("$EFFECTS", "Effects"); Lugru::Path::AddSymbolSubstitution("$MODELS", "Models"); Lugru::Path::AddSymbolSubstitution("$TEXTURES", "Textures"); Lugru::Path::AddSymbolSubstitution("$SCENES", "Scenes"); g_pEngine->Initialise(); g_pEngine->SetStandaloneInput(true); if ( Count == 1 ) { std::wstring Path(CommandLine); std::string narrow( Path.begin(), Path.end() ); if ( narrow.length() > 0 ) { Lugru::SceneLoader( Lugru::Path(narrow), *g_pEngine->GetSceneGraph(), *g_pEngine->GetRenderer(), *g_pEngine->GetGame() ); Sleep(1000); g_pEngine->GetGame()->StartGame(); } } // Enter the message loop MSG msg; ZeroMemory( &msg, sizeof( msg ) ); while( msg.message != WM_QUIT ) { if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } else { g_pEngine->Frame(); } } UnregisterClass( L"LugruTestApplication", wc.hInstance ); return 0;}
Hope that is useful,
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement