Voriger Zeichenschritt soll sichtbar bleiben



  • Moin!
    Ich probiere gerade was mit DirectDraw aus:

    while(running)
    {
    	if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    	{ 
    		if (msg.message == WM_QUIT) break;
    		TranslateMessage(&msg);
    		DispatchMessage(&msg);
    	}
    	ddDraw (hwnd);
    }
    
    void ddDraw (HWND hwnd)
    {
    	HDC			hdc;
    	HPEN		hPen;
    
    	hPen=CreatePen(PS_SOLID,3,RGB(255,0,0));
    	lpddsBack->Blt(&fill_area, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx);
    
    	lpddsBack->GetDC(&hdc);
    	SelectObject(hdc,hPen);
    	MoveToEx(hdc,pPos.x,pPos.y,NULL);
    	LineTo(hdc,pPos.x+iSpeed,pPos.y+iSpeed);
    	lpddsBack->ReleaseDC(hdc);
    
    	pPos.x=pPos.x+iSpeed;
    	pPos.y=pPos.y+iSpeed;
    
    	DeleteObject(hPen);
    	while(lpddsPrimary->Flip(NULL, DDFLIP_WAIT) != DD_OK); 
    }
    

    Nun hätte ich aber ganz gerne, dass die gezeichnete Linie aus dem vorigen Schritt sichtbar bleibt, sodass sich eine lange Linie ergibt. Weiß jemand was ich dafür ändern muss.

    mfg killsmaker

    PS: Wem es aufgefallen ist. ja es ist der code aus diesem Tutorial (oben).



  • lpddsBack->Blt(&fill_area, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx);
    

    KILLSMAKER, was macht diese Zeile?



  • OK, dass diese Zeile dann weg muss is mir auch klar, da sie ja bewirkt, dass der Backbuffer mit einer Farbe (bei mir shwarz) gefüllt wird.

    Ich kann ja mal sagen, was ich schon ausprobiert habe:

    Beide Buffer vor

    while(running)
    {
        if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
        {
    

    .......

    mit schwarz füllen, dann auf den Backbuffer malen und flippen. Also ohne vor jedem Malen den Backbuffer mit schwarz füllen. Aber bei diesem Vorgehen hatte ich das Problem, dass die Taskleiste mal zu sehen war und mal nicht (Sie soll natürlich nicht sichtbar sein^^),d.h. sie flackert immer auf. Weshalb weiß ich nicht und daher dachte ich hier gibts ne Standardlösung für...

    Also steckt da irgendwo nen Denkfehler drinne?

    mfg killsmaker



  • Gut, Vielleicht habe ich das alles auch einfach schlecht erklärt.
    Ich fang einfach mal so an:

    Ich möchte so ne Art "Snake"-Spiel programmieren. Nur der Unterschied zum Orginal: Die Schlange wird immer länger, d.h. man kann nie dahin fahren, wo man bereits war. Man könnte das Spiel auch mit Tron vergleichen, nur dass man hier halt alleine ist.
    Ziel des Spiels ist natürlich solange durchzuhalten wie möglich, was zum Ende hin immer schwieriger wird, da der Raum ja immer enger wird.

    Wie würdet ihr das realisieren, dass das Programm nicht alle vorigen Schritte nochmals zeichnen muss, sondern einfach etwas dem jetzigen Screen hinzufügt ohne ihn dabei zu löschen.

    mfg killsmaker



  • Zeichne auf eine Surface und blitte die in jedem Frame einfach auf den Screen.


Anmelden zum Antworten