Lemmons - 26 days ago 5
C++ Question

# How do I make projectiles?

I am totally stumped on this one. I'm using C++ and SFML 1.6 for a game I'm developing, and I have no bloody idea. How do I make projectiles (like bullets)? I just don't understand it. It could be my lack of sleep but I don't know.

So my question is how do I create a Sprite that moves in a definite direction based on where the mouse is? (Think of a top down shooter with mouse aiming)

Easiest solution: If the mouse is at Mx,My and the ship is at Sx,Sy then calculate the direction from the ship to the mouse: Dx=Sx-Mx Dy=Sy-My

Now normalise D (this means scale it so that it's length is one):

``````DLen=sqrt(Dx*Dx + Dy*Dy)
Dx/=DLen;
Dy/=DLen;
``````

Now Dx is the distance you want to move the bullet on the x axis in order to get bullet speed of 1.

Thus each frame you move the bullet like so (position of bullet: Bx,By Speed of bullet: Bs [in pixels per millisec] Frame time Ft[in millisec])

``````Bx=Bx+Dx*Bs*Ft
By=By+Dy*Bs*Ft
``````

This give you a bullet that moves towards the mouse position at a speed independent of the direction of the mouse or framerate of the game.

EDIT: As @MSalters says you need to check for the DLen==0 case when the mouse is directly above the ship to avoid division by zero errors on the normalise

Source (Stackoverflow)