Hehe... zamisli kako je kod mene na ~330Mhz... nisam uspeo ni da stignem do pola armagedona jer kontrole ne reaguju bas na vreme zbog zahtevnosti igre, ali zaista lepo izgleda. Uvak mozes dodati jos zanimljivih evekata (eksplozija, nesto kao 2D matrix efekat kad unistis meteor milimetar ispred sebe ( uspori se vreme, kamera se zumira, iscrtas malo lepsu eksploziju jer ionako sve treba da ide polako... ) i slicne stvari). Ideja nikad kraja :)
Da se vratim na C++ igru... nasao sam sta je problem sa iscrtavanjem. Kada napisem ovako:
Code:
struct PARTICLEVERTEX
{
float x, y, z;
D3DCOLOR color;
};
#define D3DFVF_PARTICLEVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE)
PARTICLEVERTEX *buffer = new PARTICLEVERTEX[4];
buffer[0].x = -( particlesize / 2.0f );
buffer[0].y = +( particlesize / 2.0f );
buffer[0].z = 0.0f;
buffer[1].x = +( particlesize / 2.0f );
buffer[1].y = +( particlesize / 2.0f );
buffer[1].z = 0.0f;
buffer[2].x = -( particlesize / 2.0f );
buffer[2].y = -( particlesize / 2.0f );
buffer[2].z = 0.0f;
buffer[3].x = +( particlesize / 2.0f );
buffer[3].y = -( particlesize / 2.0f );
buffer[3].z = 0.0f;
buffer[0].color = buffer[1].color = buffer[2].color = buffer[3].color = 0xffffffff;
void* vlock = NULL;
vertex->Lock( 0, sizeof(buffer), (void**)&vlock, 0 );
memcpy( vlock, buffer, sizeof(buffer) );
vertex->Unlock();
Onda se u promenljivoj vertex ne nalaze podaci koji bi trebalo (ili kompajler misli da ne bi) da budu tamo nego ko zna sta, a ako napisem ovako:
Code:
struct PARTICLEVERTEX
{
float x, y, z;
D3DCOLOR color;
};
#define D3DFVF_PARTICLEVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE)
PARTICLEVERTEX buffer[] =
{
{ -( particlesize / 2.0f ), +( particlesize / 2.0f ), 0.0f, 0xffffffff, },
{ +( particlesize / 2.0f ), +( particlesize / 2.0f ), 0.0f, 0xffffffff, },
{ -( particlesize / 2.0f ), -( particlesize / 2.0f ), 0.0f, 0xffffffff, },
{ +( particlesize / 2.0f ), -( particlesize / 2.0f ), 0.0f, 0xffffffff, },
}
void* vlock = NULL;
vertex->Lock( 0, sizeof(buffer), (void**)&vlock, 0 );
memcpy( vlock, buffer, sizeof(buffer) );
vertex->Unlock();
Onda sve radi kako treba. U cemu je problem kod prvog nacina?
Pretpostavljam da je problem u tome sto je u prvom slucaju buffer pokazivac i sizeof(buffer) vraca velicinu pokazivaca, a ne velicinu podataka u njemu.