Problem
-
Hallo,
ich bin grad dabei mein erstes Spiel zu programmieren. Es soll ein Pang-Clon werden. Ich hab schon das Fenster erzeugt und DirectX initialisiert. Beim Compilen tritt zwar kein Fehler auf aber zur Laufzeit funktioniert der Vollbildmodus nicht richtig: Ich hab 2 Surfaces erstellt(Front -und Backbuffer)
aber es wird nur der eine als Vollbild angezeigt. Beim anderen sieht man das Fenster in grauen Farben aber nur maximiert. Ich geb euch aber mal gleich den Code://Main.cpp // DEFINES #define WIN32_LEAN_AND_MEAN // LIBS EINBINDEN #pragma comment(lib,"dxguid") #pragma comment(lib,"ddraw.lib") #pragma comment(lib,"dinput.lib") // INCLUDES #include <windows.h> #include <ddraw.h> #include "Main.h" #include "2DFunktionen.h" // Callback Funktion LRESULT CALLBACK WinProc(HWND hwnd,UINT Message, WPARAM wparam, LPARAM lparam) { switch(Message) { case WM_DESTROY: { done = true; PostQuitMessage(0); return 0; } break; case WM_KEYDOWN: { switch(wparam) { case VK_ESCAPE: { PostMessage(hwnd,WM_CLOSE,0,0); return 0; } break; case VK_F12: { Puffer_wechseln(); } default: break; } } default: break; } return (DefWindowProc(hwnd,Message,wparam,lparam)); } // Callback // WINMAIN Funktion int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprevinst, LPSTR lpcmdline, int ncmdshow) { WNDCLASSEX winclass; MSG message; const char szclassname[] = "Klassenname"; DWORD loop_start_time; winclass.cbSize = sizeof(WNDCLASSEX); winclass.style = CS_HREDRAW | CS_VREDRAW; winclass.lpfnWndProc = WinProc; winclass.cbClsExtra = 0; winclass.cbWndExtra = 0; winclass.hInstance = hinst; winclass.hIcon = LoadIcon(NULL, IDC_ARROW); winclass.hCursor = LoadCursor(NULL, IDC_ARROW); winclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winclass.lpszMenuName = NULL; winclass.lpszClassName = szclassname; winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&winclass)) { MessageBox(NULL,"Fehler in XD23@deq23","Bang-Fehler!!",MB_OK); return (0); } if(!(hwnd = CreateWindowEx(NULL,szclassname,"Bang 2D-Engine", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100,300, 300,400, NULL, NULL, hinst, NULL))) return (0); Spiel_Zustand = SPIEL_MENU; if(!Spiel_initialisieren()) MessageBox(hwnd,"Fehler bei Initialisierung!","Bang - Fehler",MB_ICONEXCLAMATION); // H A U P T S C H L E I F E while(!done) { while(GetMessage(&message,NULL,0,0)) { TranslateMessage(&message); DispatchMessage(&message); } loop_start_time = GetTickCount(); switch(Spiel_Zustand) { case SPIEL_MENU: { Spiel_Zustand = SPIEL_START; } break; case SPIEL_START: { Spiel_Zustand = SPIEL_LAUEFT; } break; case SPIEL_NEUSTART: { Spiel_Zustand = SPIEL_START; } break; case SPIEL_LAUEFT: { // Nötiges Ausführen } break; case SPIEL_ESCAPE: { Spiel_Zustand = SPIEL_MENU; } break; default: break; } //Switch //GFramerate berechnen while((GetTickCount() - loop_start_time)< 40); } //Hauptschleife // Spiel beenden Spiel_beenden(); return message.wParam; } //WinMain bool Spiel_initialisieren(void) { if(!DDraw_initialisieren()) return false; return true; } bool Spiel_beenden(void) { DDraw_beenden(); return true; } bool DDraw_beenden(void) { if(lpDD != NULL) { if(lpDDSPrimary != NULL) { lpDDSPrimary->Release(); lpDDSPrimary = NULL; lpDDSBack = NULL; lpDD = NULL; } } return true; } bool DDraw_initialisieren(void) { HRESULT ddrval; DDSURFACEDESC2 ddsd; DDSCAPS2 ddscaps; HDC hdc; ddrval = DirectDrawCreateEx(NULL, (LPVOID *)&lpDD, IID_IDirectDraw7,NULL); if(ddrval != DD_OK) { MessageBox(hwnd,"DDraw Fehler: CreateEx()","XXX", MB_OK); return false; } ddrval = lpDD->SetCooperativeLevel(hwnd,DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); if (ddrval != DD_OK) { MessageBox(hwnd,"DDraw Fehler: CoopLevel()","XXX",MB_OK); return false; } ddrval = lpDD->SetDisplayMode(SCREENBREITE,SCREENHOEHE,SCREEN_BPP,0,0); if(ddrval != DD_OK) { MessageBox(hwnd,"Fehler SetDisplay","Bang",MB_ICONEXCLAMATION); return false; } // Primary Surface Createn ZeroMemory(&ddsd,sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX; ddsd.dwBackBufferCount = 1; ddrval = lpDD->CreateSurface(&ddsd,&lpDDSPrimary,NULL); if(ddrval != DD_OK) { MessageBox(hwnd,"Fehler bei Create Surface","Bang",MB_ICONEXCLAMATION); return false; } ZeroMemory(&ddscaps,sizeof(ddscaps)); ddscaps.dwCaps = DDSCAPS_BACKBUFFER; ddrval = lpDDSPrimary->GetAttachedSurface(&ddscaps,&lpDDSBack); if(ddrval != DD_OK) { MessageBox(hwnd,"Fehler bei Create Secondary","Bang",MB_ICONEXCLAMATION); return false; } Puffer_leeren(lpDDSPrimary,255); Puffer_leeren(lpDDSBack,255); return true; } // DDRaw_initialisieren bool Puffer_wechseln(void) { HRESULT ddrval; ddrval = lpDDSPrimary->Flip(NULL,DDFLIP_WAIT); if(ddrval == DD_OK) { return true; } else if(ddrval == DDERR_SURFACELOST) { ddrval = lpDDSPrimary->Restore(); if(ddrval != DD_OK) return false; ddrval = lpDDSPrimary->Flip(NULL,DDFLIP_WAIT); if(ddrval != DD_OK) { MessageBox(hwnd,"Fehler bei Flipping","Bang",MB_ICONEXCLAMATION); return false; } return true; } return true; } bool Puffer_leeren(LPDIRECTDRAWSURFACE7 lpDDSurf,UCHAR Farbe) { HRESULT ddrval; DDBLTFX ddbltfx; ZeroMemory(&ddbltfx,sizeof(ddbltfx)); ddbltfx.dwSize = sizeof(DDBLTFX); ddbltfx.dwFillColor = Farbe; ddrval = lpDDSurf->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&ddbltfx); if(ddrval != DD_OK) { MessageBox(hwnd,"Fehler bei Lehren","Bang",MB_ICONEXCLAMATION); return false; } return true; } // Main.h // DEFINITIONEN #define SCREENBREITE 800 #define SCREENHOEHE 600 #define SCREEN_BPP 8 #define SPIEL_START 0 #define SPIEL_LAUEFT 1 #define SPIEL_NEUSTART 2 #define SPIEL_MENU 3 #define SPIEL_ESCAPE 4 // PROTOTYPEN bool Spiel_initialisieren(void); bool Spiel_beenden(void); bool DDraw_initialisieren(void); bool DDraw_beenden(void); bool Puffer_wechseln(void); bool Puffer_leeren(LPDIRECTDRAWSURFACE7 lpDDSurf,UCHAR Farbe); // Globale Variablen bool done = false; LPDIRECTDRAW7 lpDD; LPDIRECTDRAWSURFACE7 lpDDSPrimary; LPDIRECTDRAWSURFACE7 lpDDSBack; LPDIRECTDRAWSURFACE7 lpStartScreen; LPDIRECTDRAWSURFACE7 lpEndScreen; int Spiel_Zustand; HWND hwnd;
Ich hoffe ihr könnt mir helfen. Anders weiß ich auch nicht mehr weiter. Schon mal Danke im voraus.
mfg jubeIrgendwie funktionieren die Code-Tags nicht
[ Dieser Beitrag wurde am 07.04.2003 um 18:28 Uhr von jube editiert. ]
[ Dieser Beitrag wurde am 08.04.2003 um 20:11 Uhr von jube editiert. ]
-
1. Codetags benutzen
2. Guck mal bei ZFX da steht das problem bestimmt im Forum oder hier auch
-
Ich kann den Code nicht formatieren.
Bei Stefan Zerbst hab ich auch nichts gefunden.
mfg jube
-
Dann probier es mal mit den Eckigen Klammern und einfach nur Code und /Code
-
if(!(hwnd = CreateWindowEx(NULL,szclassname,"Bang 2D-Engine", WS_POPUP | WS_VISIBLE,...
-
Original erstellt von jube:
Ich kann den Code nicht formatieren.Tu das um Deine Sourcen und alles wird gut:
[code type="C++" tabs="4"]// hier kommt Dein Code rein
[/cpp]
[ Dieser Beitrag wurde am 07.04.2003 um 21:02 Uhr von nman editiert. ]
-
Hi,
es geht jetzt. Danke für die Hilfe. Cool jetzt kann ich den Code sogar formatieren. Das ist ja wie Science-Fition :-).
mfg jube[ Dieser Beitrag wurde am 08.04.2003 um 20:13 Uhr von jube editiert. ]