Are you making a shooting game where the main character or spaceship can rotate 360 degrees?
Figuring out how to shoot bullets from any angle a character is facing can be challenging.
The key is being able to convert the rotation angle to a vector. We can do this manually with some trigonometry but Phaser can do this for us!
In this article, we will show you how to do this with Phaser's built-in functions and manually using math functions as a bonus.
First, let's do it the easy way.
Convert Angle to Vector with Arcade Physics
Phaser's Arcade Physics has a velocityFromAngle method that will give you a velocity vector from an angle in degrees. You can also use velocityFromRotation which takes an angle in radians.
GameObjects in Phaser use the angle property for degrees and rotation for radians. Using them interchangeably will anger the Math Gods so don't do it. 😡
Here's a simple example using a rectangle and a circle.
|
|
We create a red rectangle that is 100 pixels wide by 50 pixels tall. The angle is 0 degrees which means facing right. Phaser uses a right-hand clockwise rotation system.
Then we get a vector from the rectangle's angle with a magnitude of 50 pixels. This means adding the vector to a position will move an object 50 pixels in the direction of the vector.
Since we know the angle is 0 degrees in a right-hand system then we should expect the white circle to be on the right edge of the red rectangle.

Change the angle of rect, eg: rect.angle = 45, to test that it works as expected for different angles.
To fire a bullet from this position and in the facing direction just set the x, y as we do for the circle and then set the velocity to vec.
But what if you want the bullet to move faster or slower than 50px per frame?
Here's a variant that gets vec as a direction only. Then we can apply a magnitude to it.
|
|
The next 2 sections will cover additional options for the geekiest among us.
Convert Angle to Vector Without Arcade Physics
The velocityFromAngle method is just a convenience method. You can use Phaser.Math.Vector2 to achieve the same result.
This would be useful if you are not using Arcade Physics.
|
|
The setToPolar method is called by velocityFromAngle so both examples do the same thing. 🤗
This is useful in classes without a reference to the Scene or Arcade Physics.
Convert Angle to Vector with Trigonometry
Lastly, let's look at how we can do what setToPolar does with basic trigonometric functions in case you don't want to use a Phaser.Math.Vector2 instance.
We use cos and sin to convert an angle in radians to an x and y position.
|
|
The multiplied value of 50 is the magnitude. It can be changed to 1 for just direction like we did above.
Explaining why cos and sin works is out of the scope of this article but remember that cos is adjacent / hypotenuse and sin is opposite / hypotenuse.
Adjacent is along the x-axis and opposite is along the y-axis. See here for more information.
Next Steps
You now know how to convert any angle to a vector that can be used to fire bullets, lasers, or launch angry birds. 🤨
If you haven't already, be sure to sign up for our newsletter so you don't miss any future Phaser 3 game development tips and techniques!
Drop your email into the box below.
Don't miss any Phaser 3 game development content
Subscribers get exclusive tips & techniques not found on the blog!
Join our newsletter. It's free. We don't spam. Spamming is for jerks.