---
title: "Programmera en partikelmotor"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/88921-programmera-en-partikelmotor"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "Alpha II"
published: "2003-10-19T17:57:21.000Z"
updated: "2003-10-31T22:32:00.000Z"
replies: 7
views: 439
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/88921-programmera-en-partikelmotor"
---

# Programmera en partikelmotor

## #1 — Alpha II, 2003-10-19T17:57Z

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?

Permalänk: https://www.webforum.nu/p/88921

## #2 — spango, 2003-10-20T11:14Z

Jag kanske missförstår dig, men är det inte ett vanligt hederligt template du är ute efter?

Permalänk: https://www.webforum.nu/p/1190363

## #3 — Alpha II, 2003-10-20T20:10Z

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.

Permalänk: https://www.webforum.nu/p/1190743

## #4 — spango, 2003-10-21T17:32Z

Hm. Knepigt. Du är alltså ute efter någon form av factory-pattern, som skapar instanser av olika subklasser till CParticle?

Permalänk: https://www.webforum.nu/p/1191241

## #5 — Alpha II, 2003-10-22T09:52Z

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

Permalänk: https://www.webforum.nu/p/1194585

## #6 — Josef, 2003-10-22T09:55Z

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

Permalänk: https://www.webforum.nu/p/1194589

## #7 — Alpha II, 2003-10-22T18:13Z

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

Permalänk: https://www.webforum.nu/p/1194953

## #8 — Sang-drax, 2003-10-31T22:32Z

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);
```

Permalänk: https://www.webforum.nu/p/1195750

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/88921-programmera-en-partikelmotor
