This may be the wrong approach, but as I dig deeper into developing my game engine I have ran into a timing issue.
So lets say I have a set of statements like:
for(int i = 0; i < 400; i++)
{
engine->get2DObject("bullet")->Move(1, 0);
}
The bullet will move, however, on the screen there won’t be any animation. It will basically “warp” from one part of the screen to the next.
So, I am thinking…create a vector of function pointers for each base object (which the user inherits from) and when they call “Move” I actually don’t move the object until the next iteration of the game loop.
So something like:
while(game.running())
{
game.go();
}
go()
{
for(...)
2dobjs.at(i)->action.pop_back();
}
Or something like that, and this way it runs only a single action of each object during each iteration (of course I’ll add in a check to see if there is actually “actions” to be ran).
And if that is a good idea, my question is how do I store the parameters. Since each object can do more than a single type of “action” rather than move (rotateby is one example), I think it would be nonsensical to create a struct similar in fashion to:
struct MoveAction {
MovePTR...;
int para1;
int para2;
};
Thoughts? Or is this the completely wrong direction?
I don’t think this is the right direction. After you store 400 moves in a vector of function pointers, you’ll still need to pop and perform a move, redraw the screen, and repeat. Isn’t it easier just to move(), redraw, and repeat?
I’d say your bullet is warping because it’s moving 400 pixels/frame, not because you need to delay the move calculations.
But if this is the correct solution for your architecture, in C++ you should use classes rather than function pointers. For example: