Hej,
försöker komma på någon snygg funktion som går igenom en länkar lista och letar efter objekt som uppfyller vissa vilkor (kollar avstånd mellan deras positioner och spelarens sikte, det är ett spel :D ). Problemet är att jag inte vet hur jag ska returnera listan med pekare.
Jag tänkte först att jag skulle göra en funktion som tog en CParticle pekare och en pekare till en int som argument. Sen skulle minne allokeras i CParticle för att hålla adresserna till n antal objekt.
Problemet är att CParticle är en helt virituell klass som har många andra små klasser som ärver ifrån den så det går inte att allkoera CParticle objekt.
Jag är inte alls säker på att jag har gjort allt detta på rätt sätt, det är väldigt mycket krångel och konstiga koder för att skapa objekt till den länkade listan.
Såhär ser den ej fungerande funktionen ut.
void CParticleEngine::GetNodesAt(vec2f point, CParticle *nodes, int *num)
{
CParticle *node = m_pBase;
*num = 0;
while(node!=NULL)
{
int x = int(node->pos.x);
int y = int(node->pos.y);
int size = int(node->size);
float deltaXSqr = (float)pow(x - point.x, 2);
float deltaYSqr = (float)pow(y - point.y, 2);
float sumRadii = (float)pow(size + 50, 2);
if(deltaXSqr+deltaYSqr < sumRadii && node->killable)
{
*num++;
nodes = new CParticle[*num];
nodes[*num-1] = node;
}
node = node->next;
}
}
Sen när jag vet vilka objekt som hittas skulle jag också behöva komma åt medlemsvariabler som finns i de klasser som ärver från CParticle.
Såhär skapar jag fö partiklar:
void CrateNewFeatherEmitter(CParticleEngine *pEngine, float x, float y, int size, CTextureAnim *texture)
{
for(int i=0;i<5;i++)
{
CParticle *p = new CParticleFeather;
p->pos = vec2f(x, y);
p->vel = vec2f((float)random(-50,50), (float)random(-50,50));
p->gravity = vec2f(0.0f, -100.0f);
p->size = random(size,size+20)/10.0f;
p->life = 5;
CParticleFeather *pFeather;
pFeather = (CParticleFeather*)p;
pFeather->textureAnim = *texture;
pFeather->textureAnim.Randomize();
pEngine->CreateNew(p);
}
}
Finns det något smartare sätt att göra detta på? Jag har inte så bra koll på hur man använder klasser på ett lite mer avancerat sätt.