Anzeige von Bildern mit DirectDraw funktioniert nicht mehr?
-
Hallo Leute!
Ich bin gerade dabei ein paar bilder auf meinem pc mittels directdraw zu animieren und zu bewegen. bis vor kurzem hat das auch ganz gut funktioniert.
Nur seit ein paar Tagen läuft das compillierte programm nicht mehr richtig.
Könnt ihr mir sagen was falsch läfut?Ich benutze BCB 5 ^^
Hier ist der Teil meines Projektes wo meiner meinung nach der Fehler liegen mussSagt bescheid falls ihr den ganzen Code braucht um mir zu helfen
Danke im Vorraus!!!void drawactor(LPDIRECTDRAW ddobjekt,LPDIRECTDRAWSURFACE surface, TImageList *list,character *actor) { /* DONE : Drawworld auf drawcharacter umschreiben !!!!! */ HRESULT result; LPDIRECTDRAWSURFACE zwischen; LPDDCOLORKEY ColorKey; RECT rectbitmap; char buf[256]; Graphics::TBitmap *bmp; bmp=new Graphics::TBitmap; DDSURFACEDESC ddsd; BITMAP bm; bmp=getbmpfromimagelist(list,actor->frame); actor->height = bmp->Height; actor->width = bmp->Width; int height=actor->y -yst - actor->height; int width= actor->x -xst + actor->width/2; // get size of the bitmap GetObject(bmp->Handle, sizeof(bm), &bm); /* DONE : Bild wird auf gesamte surface kopiert, als nächstes muss das bild auf einen kleinen teil der surface kopiert werden */ //BitmapSurface erstellen ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT |DDSD_WIDTH; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; ddsd.dwWidth = bm.bmWidth; ddsd.dwHeight = bm.bmHeight; if (ddobjekt->CreateSurface(&ddsd,&zwischen,NULL) == DD_OK) { AddColorKey(zwischen,clWhite,clWhite); result=DDCopyBitmap(zwischen,bmp->Handle,0,0,bmp->Width,bmp->Height); SetRect(&rectbitmap,width, height + actor->z , width+bmp->Width,height+bmp->Height); surface->Blt(&rectbitmap,zwischen,NULL,DDBLT_WAIT| DDBLT_KEYSRC,NULL); } else { wsprintf(buf, "DrawWorld Fehler (%08lx)\n", result); MessageBox(Handle, buf, "ERROR", MB_OK); FormMain->Close(); } zwischen->Release(); bmp->Free(); } //------------------------------------------------------------ void AddColorKey (LPDIRECTDRAWSURFACE surface, DWORD Low, DWORD High) { /* Low Value für transparente farbe, high = low solange nicht eine range von farben ausgeblendet werden soll */ DDCOLORKEY key; ZeroMemory(&key, sizeof(key)); key.dwColorSpaceLowValue = Low; key.dwColorSpaceHighValue = High; surface->SetColorKey (DDCKEY_SRCBLT, &key); } //------------------------------------------------------------ void dddrawing(LPDIRECTDRAWSURFACE ps, LPDIRECTDRAWSURFACE bs,int wheight, int wwidth) { HDC DC; HRESULT result; while(1) { result = ps->Flip(NULL, 0); if(result == DD_OK) break; if(result == DDERR_SURFACELOST) { result = ps->Restore(); if(result != DD_OK) break; } if(result != DDERR_WASSTILLDRAWING) break; } }
Es hat vor kurzem noch alles funktioniert. Hab eigentlich nichts großartig umgeschrieben, und an diesen funktionen hier hab ich gar nichts geändert, aber eder fehler kann praktisch nur hier liegen oder?
Compilieren lässt sich das ganze ohne Fehler
Hoffe auf baldige HIlfe
mfg
tecnigas
-
"Läuft nicht mehr richtig" ist keine aussagekräftige Problembeschreibung.
-
Hast recht,
das ist wirklich keine Fehlerbeschreibung sorry ^^das problem hat sich aber schon erledigt. hatte nur vergessen meinen actoren die startwerte zuzuweisen ^^