Prob mit C++-Spiel



  • Also ich hab ein Problem. Ich bin gerade dabei ein Spiel zu programmieren und da hab ich einen Dialog in Microsoft Visual C++ erstellt. Im DIalog stehen 7 Radiobuttons 7 Bilder ein OK und ein Cancel- Button. Ich hab den Dialog in den Quellcode reingeschrieben und die 7 bilder sollen bewirken dass wenn man ein radiobutton aktiviert, dass das BIld als Hintergrundbild verwendet wird.
    Und jetzt meine Frage warum funkt dieser Quellcode nicht???

    public:
    HRESULT new_BG
    ...
    BOOL CALLBACK konfigurationsdialog( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	int i;
    
    	switch (uMsg)
    {
    	case WM_INITDIALOG:
    		CheckDlgButton(hwndDlg, 5000+i, BST_CHECKED || BST_UNCHECKED);
    		return TRUE;
    	case WM_COMMAND:
    		if(wParam == IDOK)
    		{
    			{
    			HRESULT display::new_BG()
    			{
    					HRESULT hr;
    	                LPDIRECTDRAWPALETTE pal = 0;
    	                char fname[20];
    			if (Background)
    				delete Background;
    			hr = Background->DrawBitmap( "w%d.bmp", catch_nettobreite, catch_nettohoehe);
    			if (hr < 0 )
    				return hr;
    				}
    		}
    		}
    	if(wParam == IDCANCEL)
    		{
    
    		EndDialog(hwndDlg, wParam);
    		return TRUE;
    	}
    	return FALSE;
    	}
    }
    ...
    		case ID_EINSTELLUNGEN_KONFIGURATION:
    			DialogBox( catch_instance, MAKEINTRESOURCE( IDD_KONFIGURATION), catch_window, konfigurationsdialog);
    			return 0;
    

    danke im vorraus

    mfg TheDome



  • TheDome schrieb:

    hr = Background->DrawBitmap( "w%d.bmp", catch_nettobreite, catch_nettohoehe);
    

    Die Bitmap-Datei heißt wirklich "w%d.bmp"? Für alle 7 Bilder? Ich würde ja eher vermuten, daß du mehrere Dateien "w0.bmp" bis "w7.bmp" hast - und da mußt du den gewünschten Dateinamen erst per sprintf() o.ä. zusammensetzen.

    PS: Außerdem macht es wenig Sinn, erst das Objekt "Background" zu löschen und danach auf seine Methoden zuzugreifen (sowas nennt man im allgemeinen Sprachgebrauch "Leichenfledderei" - und unter C++ Experten "undefined behaviour").



  • aso ok aber bei mir kommt bei dem

    if(wParam == IDOK)
    {
    {
    HRESULT display::new_BG()
    {

    einmal "Diese Zeile enthält eine '{', die keine Entsprechung hat"
    und einmal "error C2601: 'display::new_BG': Lokale Funktionsdefinitionen sind unzulässig" weiß jemand warum???



  • Ja - du versuchst eine Methode lokal im Inneren deiner if-Anweisung zu definieren, das ist in C++ nicht erlaubt. An der Stelle könntest du die Funktion höchstens aufrufen.



  • aso dass ist mein erstes spiel und klingt vllt etwas dumm aber wie macht man das??



  • Dann solltest du erstmal die Sprache lernen, bevor du sie für ein größeres Projekt einsetzen willst.


Log in to reply