Alpha IIMedlem sedan maj 20002 993 inlägg Jag försöker skapa en relativt enkel partikelmotor. Den ska kunna hantera olika sorters partiklar, men jag vet inte riktigt hur jag går till väga genom att inplementera det. Jag postar lite kod för att visa problemet.
#ifndef _PARTICLES_H_
#define _PARTICLES_H_
class CParticle
{
public:
CParticle();
~CParticle();
virtual void Reset();
virtual void Draw()=0;
virtual void Update()=0;
public:
vec2f pos;
vec2f vel;
vec2f gravity;
float life;
};
class CParticleEngine
{
public:
CParticleEngine();
~CParticleEngine();
void Draw();
void Update();
void ClearAll();
[b]
pekare_till_den_nya_partikeln * CreateNew(particleType, float x, float y); // <---- ??
void CreateEmitter(particleType, float x=0, float y=0, float duration, float delay);// <---- ??
[/b]
private:
CParticle * m_pBase;
CParticle * m_pParticle;
};
class CSpriteParticle : public CParticle
{
public:
CParticle();
~CParticle();
void Reset();
void Draw();
void Update();
public:
CTexture * pTexture;
};
class CTextParticle : public CParticle
{
public:
CParticle();
~CParticle();
void Reset();
void Draw();
void Update();
public:
char text[50];
};
Hur ska jag deklarera funktionerna så att de kan ta ett klassnamn som argument och returnera en pekare till samma sorts objekt som de fick som argument?
spangoMedlem sedan juni 20008 205 inlägg Jag kanske missförstår dig, men är det inte ett vanligt hederligt template du är ute efter?
Alpha IIMedlem sedan maj 20002 993 inlägg Njae. Vet inte riktigt om det är template sjag bör använda. Jag är dock inte helt säker. Har aldrig använt templates och är lite osäker på dem...
Jag vill kuna använda partikelnmotor på det här sättet (inte heltsäker på om det är möjligt):
CTextParticle * pParticle = CParticleEngine.CreateNew(CTextParticle, 150, 233);
pParticle->SetText("Text...");
Där SetText funktionen enbart ska finnas med i CTextParticle... väldigt osäker på hur jag ska gå till väga med att programmera det, om än möjligt.
spangoMedlem sedan juni 20008 205 inlägg Hm. Knepigt. Du är alltså ute efter någon form av factory-pattern, som skapar instanser av olika subklasser till CParticle?
Alpha IIMedlem sedan maj 20002 993 inlägg Vet inte riktigt. Men jag har löst det på ett annat sätt nu :)
JosefMedlem sedan mars 20023 561 inlägg Som vanligt uppskattas det om man postar lösningen... ;)
Alpha IIMedlem sedan maj 20002 993 inlägg Ja men lösning i det här fallet blev något helt annat och knappast relaterat till frågan :p ;)
Så går inte att göra, sådan här kod är möjlig att erhålla:
//Med typeid
CTextParticle * pParticle = CParticleEngine.CreateNew( typeid(CTextParticle), 150, 233);
//Med templates (bäst)
CTextParticle * pParticle = CParticleEngine.CreateNew<CTextParticle>(150, 233);