Problem mit Colorkey



  • Hallo,

    ich habe ein Problem mit dem Colorkey (DDraw7). Wenn ich ein Colorkey für die Farbe schwarz möchte, mache ich das wie folgt:

    //LPDIRECTDRAW7        lpDD; Ein initialisiertes DDraw Objekt
    DDSURFACEDESC2 			ddsd;
    LPDIRECTDRAWSURFACE7 	Surface1;
    DDCOLORKEY 				ColorKey;
    
    ZeroMemory(&ddsd,sizeof(ddsd));
    ddsd.dwSize   =	sizeof(ddsd);
    ddsd.dwFlags  =	DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT;
    ddsd.dwWidth  =	200;
    ddsd.dwHeight =	200;
    ddsd.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN;
    
    if (DD_OK!=lpDD->CreateSurface(&ddsd, &Surface1, NULL))
    	MessageBox(hwnd,"Fehler beim erstellen einer Offscreen Surface","Fehler",NULL);
    
    ColorKey.dwColorSpaceLowValue	= 0;
    ColorKey.dwColorSpaceHighValue	= 0;
    
    if(DD_OK != Surface1->SetColorKey(DDCKEY_SRCBLT, &ColorKey))
    	MessageBox(hwnd, "Fehler bei SetColorKey","Error",NULL);
    

    Leider funktioniert das nicht, wenn ich danach ein Bild in die Surface lade und es mit ->Blt auf den Backbuffer blitte. Sonst funktioniert alles, bloss der Colorkey nicht. Falls der Fehler nicht in dem Codeausschnitt ist, woran könnte es sonst liegen? Wäre schön, wenn mir jemand helfen könnte.

    Vielen Dank



  • Der Fehler könnte an der Blitfunktion liegen. Zeig mal die Stelle.



  • Also hier die Stelle:

    //In der Surface1 befindet sich nun ein Bild
    //Vor der Hauptschleife zwei RECT's zum testen:
    RECT			Quelle,Ziel;
    
    Ziel.top		  = 100;
    Ziel.left		 = 100;
    Ziel.right		= 300;
    Ziel.bottom	    = 300;
    
    Quelle.top		= 0;
    Quelle.left		= 0;
    Quelle.right	= 200;
    Quelle.bottom	= 200;
    //...
    //In der Hauptschleife:
    if(DD_OK != lpDDSBack->Blt(&Ziel, Surface1, &Quelle, DDBLT_WAIT,NULL)) 
    			MessageBox(hwnd, "Fehler beim blitten", "Error", NULL);
    


  • lpDDSBack->Blt(&Ziel, Surface1, &Quelle, DDBLT_WAIT | DDBLT_KEYSRC, NULL);
    

    mfG



  • Vielen Dank! Jetzt funktioniert alles wie es sollte.



  • Wie konnte das geniale Microsoft nur vergessen, das in die Doku zu schreiben?

    Bye, TGGC (Der Held ist zurück)



  • Jeder macht doch mal Fehler (TGGC ausgeschlossen).



  • Wir sollten das Forum sperren und nur noch einen Link zu Google und Microsoft legen. Dann müsste man sich die dummen Fragen der Anfänger nicht mehr antun.

    😉



  • H.L.T.O schrieb:

    Wir sollten das Forum sperren und nur noch einen Link zu Google und Microsoft legen.

    Bist Du bekloppt?!?!?!?! 😮
    - Du hast das "M-Wort" benutzt...!!!!! 😞
    - Neeeeeeeeeeeeeeeeeeeeeeeeeeeeiiiiiiiiiiiiiiiiiiiiiiiinnnnnnnnnn...!!!!

    😉 🤡



  • Tut mir leid, ich habe den Code nach und nach aufgebaut. Zuerst habe ich bloss Bitmaps geladen und geblittet und erst als das funktionierte die Colorkeys mitberücksichtigt. Ich dachte, der Fehler läge in der Initialisierung des CK. Deshalb habe ich in der Doku nur diese Funktion nachgeschaut. Als ich dann dachte dass das korrekt sein könnte, schaute ich mir Tutorials an, in welchen aber immer irgendwo etwas anders war, was ich aber nicht wollte.

    ENTSCHULDIGUNG!!!!!!!!!



  • Du musst dich nicht entschuldigen. Dieses Forum ist da damit dir geholfen wird.

    Also keine Sorgen machen. Du darfst jede Frage stellen. Solange es sich um die Spieleprogrammierung handelt. 👍

    cu

    EDIT:

    ich entdeckte gerade diesen Thread
    http://www.c-plusplus.net/forum/viewtopic.php?t=60484

    Ich verstehe solche Leute nicht die meinen sie könnten mit ein wenig Programmiererfahrung so was ähliches wie Doom zu programmieren.



  • H.L.T.O schrieb:

    Ich verstehe solche Leute nicht die meinen sie könnten mit ein wenig Programmiererfahrung so was ähliches wie Doom zu programmieren.

    Hui, ich dachte schon, es läge an mir. 😉

    Und Frage kann man natürlich jede stellen (und sei's nur um zu beweisen, das es doch dumme Fragen gibt). Aber ob man damit vorwärts kommt, ist wieder eine andere Sache.

    Bye, TGGC (Der Held ist zurück)


Anmelden zum Antworten