Fullscreen mit DirectX 9
-
Hallo,
ich möchte ein Fullscreen-Spiel mit DX-9 programmieren.
Das Problem ist, das ich nur ein Buch (Spieleprogr. mit DirectX und C++, Ulrich Kaiser & Phillip Lensing) habe, in dem nur Spiele im Fenstermodus erklärt werden.
Im Internet habe ich nur Siten gefunden, die vorherige Versionen von DX oder eben Fenster behandeln. Irgendwie soll das ja mit der Funktion CreateFullScreenDisplay() gehen, aber wie?
Mein Versuch
# include <windows.h> # include <ddraw.h> # include <dsound.h> # include "ddutil.h" # include "dsutil.h" const int bruttobreite = GetSystemMetrics( SM_CYSCREEN); const int bruttohoehe = GetSystemMetrics( SM_CXSCREEN); HINSTANCE instance; HWND window; class display { private: CDisplay c_display; CSurface *c_hintergrund; public: display(); void free_all(); ~display() {free_all();} HRESULT init( HWND wnd); void hintergrund() { c_display.Blt( 0, 0, c_hintergrund);} void update(){ c_display.UpdateBounds();} HRESULT cooperative(){return c_display.GetDirectDraw()->TestCooperativeLevel();} HRESULT restore(); HRESULT present(); }; display::display() { c_hintergrund = 0; } void display::free_all() { if( c_hintergrund) delete c_hintergrund; } HRESULT display::init( HWND wnd) { HRESULT hr; hr = c_display.CreateFullScreenDisplay( wnd, bruttobreite, bruttohoehe, 16); if( hr < 0) return hr; hr = c_display.CreateSurfaceFromBitmap( &c_hintergrund, "hintergrund.bmp", bruttobreite, bruttohoehe); if( hr < 0) return hr; return S_OK; } HRESULT display::restore() { HRESULT hr; hr = c_display.GetDirectDraw()->RestoreAllSurfaces(); if( hr < 0) return hr; hr = c_hintergrund->DrawBitmap( "hintergrund.bmp", bruttobreite, bruttohoehe); if( hr < 0) return hr; return S_OK; } HRESULT display::present() { HRESULT hr; hr = c_display.Present(); if( hr == DDERR_SURFACELOST ) return restore(); return hr; } display spiel_display; LRESULT CALLBACK windowhandler( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_DESTROY: PostQuitMessage( 0); return 0; } } int APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int nCmdShow) { MSG msg; WNDCLASSEX wcx; instance = hInst; wcx.cbSize = sizeof( wcx); wcx.lpszClassName = TEXT( "Spiel"); wcx.lpfnWndProc = windowhandler; wcx.style = CS_VREDRAW | CS_HREDRAW; wcx.hInstance = hInst; wcx.hIcon = 0; wcx.hIconSm = 0; wcx.hCursor = 0; wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcx.lpszMenuName = 0; wcx.cbClsExtra = 0; wcx.cbWndExtra = 0; if( !RegisterClassEx( &wcx)) return 0; window = CreateWindowEx( 0, TEXT( "Spiel"), TEXT( "Spiel"), WS_POPUP, CW_USEDEFAULT, CW_USEDEFAULT, bruttobreite, bruttohoehe, NULL, NULL, hInst, NULL); if( !window) return 0; if( spiel_display.init( window) < 0) { MessageBox( window, "Fehler beim Initialisieren der Grafik", "Fehlermeldung", MB_OK | MB_ICONERROR | MB_SETFOREGROUND); return 0; } ShowWindow( window, nCmdShow); while( TRUE) { if( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE)) { if( msg.message == WM_QUIT ) return 0; TranslateMessage( &msg); DispatchMessage( &msg); } else { //... } } }schlug mit (18) Fehlermeldungen vom Typ LNK2019 fehl:
error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_DirectDrawCreateEx@16" in Funktion ""public: long __thiscall CDisplay::CreateFullScreenDisplay(struct HWND__ *,unsigned long,unsigned long,unsigned long)" (?CreateFullScreenDisplay@CDisplay@@QAEJPAUHWND__@@KKK@Z)". ddutil.objKann mir jemand helfen

-
Hallo,
welche IDE verwendest du? DX LIBs mit ins Projekt eingebunden? DX-SDK vollständig installiert?
Nebenbei: DDraw verwendet man eigentlich nicht mehr. Simple 2D Grafik ist auch mit D3D möglich.Gruß
Markus
-
Also, ich arbeite mit Visual C++ 2005 Express und DX ist vollständig installiert. Ein einfaches "Fenstergame" hab ich schon programmiert.

Das DDraw nicht mehr benutzt wird, ist mir neu. Wie würde denn ein (2D-)Beispiel mit D3D aussehen??
(Kann ich mir im Moment nicht vorstellen!)thx,
XCoder++
-
Zum Thema 2D mit 3D einfach mal googeln z.B:
http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/tipps/tip0308.shtml (VB)
http://www.gamedev.net/reference/articles/article1972.asp (C++, englisch)das nicht aufgelöste externe Symbol deutet doch eigentlich darauf hin, dass eine Biliothek nicht mit ins Prjekt eingebunden wurde.
Gruß
Markus
-
Danke für die Hilfe!
mfg