Olen yrittänyt tehdä funktion joka palauttaa piirretyn pelikentän directdraw pinnalle "kartta" nimisen level tiedoston mukaan. Ohjelma kääntyy(Visual C++) mutta ohjelman suoritus loppuu välittömästi, mutta toimi vielä ilman tätä funktiota jonka siaan asetin vain 1500x1500 bmp kuvan pelikenttä pinnalle.
IDirectDrawSurface7* CreateMap(IDirectDraw7* pdd) { DDSURFACEDESC2 ddsd; IDirectDrawSurface7 *map; ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; ddsd.dwWidth = 1500; ddsd.dwHeight = 1500; if (pdd->CreateSurface(&ddsd, &rawmap, NULL) != DD_OK) return NULL; char level[30][30];// Tähän tallennetaan level tiedosto ifstream syota("kartta");// Tiedosto jossa 30 "ioioioioioioioioioioioioioioio,"-Riviä char aluku; int col = 0; int lin = 0; do // Lukee "kartta"-tiedoston taulukkoon { syota >> aluku; if(aluku != ',') { kartta[lin][col] = aluku; col++; } else // Rivin vaihto { col = 0; lin++; } }while(!syota.eof()); r.left = 0; r.top = 0; r.right = 50; r.bottom = 50; // Aiemmin Esitelty RECT for(int i=0; i < 30; i++) // Piirretään pelikenttä object1/0 paloista { for(int j=0; j < 30; j++) { if(map[i][j] == 'i') map->BltFast(j*50, i*50, object1, &r,//object1: 50x50 pinta DDBLTFAST_NOCOLORKEY | DDBLTFAST_WAIT); if(map[i][j] == 'o') map->BltFast(j*50, i*50, object0, &r,//object0: 50x50 pinta DDBLTFAST_NOCOLORKEY | DDBLTFAST_WAIT); if(map[i][j] != 'o' && map[i][j] != 'o') map->BltFast(j*50, i*50, object0, &r, DDBLTFAST_NOCOLORKEY | DDBLTFAST_WAIT); } } return rawmap; }
Tarkista BltFastin paluuarvo.
Se ei taida ehtiä palauttaa mitään siillä vaikka laittaisin koodia sinne näin:
if(map->BltFast(0, 0, object1, &r, DDBLTFAST_NOCOLORKEY | DDBLTFAST_WAIT)!=DD_OK) MessageBeep(MB_OK);
Tai näin:
if(map->BltFast(0, 0, object1, &r, DDBLTFAST_NOCOLORKEY | DDBLTFAST_WAIT)==DD_OK) MessageBeep(MB_OK);
Mitään ääntä ei kuulu.
Aihe on jo aika vanha, joten et voi enää vastata siihen.