Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Ei toimiva pelikentän piirtofunktio

Darth_Sebane [10.08.2003 13:11:13]

#

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;
}

thefox [11.08.2003 11:40:51]

#

Tarkista BltFastin paluuarvo.

Darth_Sebane [11.08.2003 12:36:47]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta