Ik ben een programma aan het maken waarin bewegende objecten tegen elkaar botsen.
Ik heb een base-class Entity gemaakt, en 2 afgeleide klassen Rock en Creature.
Creature heeft de methode "move()" en Rock niet (en Entity virtual).
Ik maak een array van Entity als volgt aan:
[code=c++]
class World
{
array<Entity*>pop;
World()
{
Entity* x=new Creature();
Entity* y=new Rock();
pop.push_back(x);
pop.push_back(y);
}
};
[/code=c++]
Ik heb in Entity ook een functie bool intersects(Entity*e) gedefinieerd die kijkt of 2 entities elkaar raken.
Vervolgens pak ik pop[i], en ga ik elke entity af en kijk of ze ermee intersecten.
Daarvoor wil ik een kopie maken van pop[x], daar move op uitvoeren en kijken of hij dan intersect.
Mijn vraag is nu, hoe maak ik die kopie met behoud van methoden als move, maar zonder dus iets in pop[i] te veranderen.
Dit is wat ik nu doe:
[code=c++]
Entity* e=pop[i];
e->move();
//check op intersects en zo nee, dan:
pop[i].move();
[/code=c++]
Ik wil dus even testen of die move wel valide is.
Weet iemand hoe ik die kopie kan maken zodat het een afgeleid object blijft, maar niet zijn bewerkingen doet in pop[i] ?
Alvast bedankt
PS Ik heb weinig scholing in c++ gehad, en ben mezelf wat bij aan het leren door zelf wat te gaan programmeren.
PPS ik zie dat ik de titel niet juist heb geformat, excuses hiervoor.
Ik heb een base-class Entity gemaakt, en 2 afgeleide klassen Rock en Creature.
Creature heeft de methode "move()" en Rock niet (en Entity virtual).
Ik maak een array van Entity als volgt aan:
[code=c++]
class World
{
array<Entity*>pop;
World()
{
Entity* x=new Creature();
Entity* y=new Rock();
pop.push_back(x);
pop.push_back(y);
}
};
[/code=c++]
Ik heb in Entity ook een functie bool intersects(Entity*e) gedefinieerd die kijkt of 2 entities elkaar raken.
Vervolgens pak ik pop[i], en ga ik elke entity af en kijk of ze ermee intersecten.
Daarvoor wil ik een kopie maken van pop[x], daar move op uitvoeren en kijken of hij dan intersect.
Mijn vraag is nu, hoe maak ik die kopie met behoud van methoden als move, maar zonder dus iets in pop[i] te veranderen.
Dit is wat ik nu doe:
[code=c++]
Entity* e=pop[i];
e->move();
//check op intersects en zo nee, dan:
pop[i].move();
[/code=c++]
Ik wil dus even testen of die move wel valide is.
Weet iemand hoe ik die kopie kan maken zodat het een afgeleid object blijft, maar niet zijn bewerkingen doet in pop[i] ?
Alvast bedankt
PS Ik heb weinig scholing in c++ gehad, en ben mezelf wat bij aan het leren door zelf wat te gaan programmeren.
PPS ik zie dat ik de titel niet juist heb geformat, excuses hiervoor.
[ Voor 2% gewijzigd door Verwijderd op 17-04-2008 17:55 . Reden: PPS ]