Among the other member variables, my bullets have angle and a float named basetime, which says at what time the bullet has been shoot. Every time the game loop is executed, I save the frame time in a float and add it to TotalPastTime. Doing this way I have a whole set of instruments I can use to move the bullet: for example, I could make it move straight forward to the player with something like (I'm inventing at the moment):
On bullet's constructor:
angle=-atan2f(Player.Pos.y-enemy.Pos.y, Player.Pos.x-enemy.Pos.x); //Radians
Sprite.SetRotation(angle*180/PI);
And on bullet's move func:
Sprite.Move(cos(Angle)*speed*FrameTime, -sin(Angle)*speed*FrameTime); //speed is usually a raw number, not a variable
The above, when executed, makes the bullet calculate where she has to go, aiming to the player, and then, during the loop, it moves in a linear way using cos/sin for the variable angle
The basetime usually comes when I want to make more complex patterns, such as accelerating or curving ones. For example, accelerating bullets' move func could be something like:
Sprite.Move(cos(Angle)*(100+(200*(PastTime-basetime)))*FrameTime, -sin(Angle)*(100+(200*(PastTime-basetime)))*FrameTime);
In this example, I have a bullet which initially has a speed of 100 but, after a second, has reached a speed of 300.
But I also could stop the bullets for a while, (like TD fairies at the beginning and end of stage 3), and this could be easily done by checking the value of PastTime-basetime.
This is how I do it. There's only one thing left I have to tell you: Good Luck with your game!!!
PS. Sorry for my English, it's not my main language