webForumDet fria alternativet

Programmera en partikelmotor

7 svar · 418 visningar · startad av Alpha II

Alpha IIMedlem sedan maj 20002 993 inlägg
#1

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
#2

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
#3

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
#4

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
#5

Vet inte riktigt. Men jag har löst det på ett annat sätt nu :)

JosefMedlem sedan mars 20023 561 inlägg
#6

Som vanligt uppskattas det om man postar lösningen... ;)

Alpha IIMedlem sedan maj 20002 993 inlägg
#7

Ja men lösning i det här fallet blev något helt annat och knappast relaterat till frågan :p ;)

Sang-draxMedlem sedan juli 2002581 inlägg
#8

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);
133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)