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.