Something that has been very useful for me lately is to be able to get the angle between two objects or get the angle between the mouse and a central character. For example in a game with a spaceship where you want to click and fire, you need to know the angle to be able to turn the ship. The actual math to get the angle is a bit complex, and I won’t pretend I understand it, but it has been a very useful snippet for me to have.
getAngle: function(obj1, obj2) {
// angle in radians
var angleRadians = Math.atan2(obj2.y - obj1.y, obj2.x - obj1.x);
// angle in degrees
var angleDeg = (Math.atan2(obj2.y - obj1.y, obj2.x - obj1.x) * 180 / Math.PI);
return angleDeg;
},
All you need to do to get the angle is to pass two objects like this
var angle=this.getAngle(goodGuy,monster);
Here is an example where I use the angle between the mouse and a space ship to turn the ship.
Click anywhere to have the ship point at the mouse.
And here is the code for the example
var StateMain = {
preload: function() {
game.load.image("ship", "images/ship.png");
},
create: function() {
this.ship = game.add.sprite(game.world.centerX, game.world.centerY, "ship");
this.ship.anchor.set(0.5, 0.5);
game.input.onUp.add(this.clickCanvas, this);
},
clickCanvas: function() {
//make an object from the mouse postion
var obj1 = {
x: game.input.x,
y: game.input.y
};
//get the angle between the mouse and the ship and assign that to the
//ship's angle
this.ship.angle = this.getAngle(obj1, this.ship);
},
getAngle: function(obj1, obj2) {
//I use the offset because the ship is pointing down
//at the 6 o'clock position
//set to 0 if your sprite is facing 3 o'clock
//set to 180 if your sprite is facing 9 o'clock
//set to 270 if your sprite is facing 12 o'clock
//
offSet = 90;
// angle in radians
var angleRadians = Math.atan2(obj2.y - obj1.y, obj2.x - obj1.x);
// angle in degrees
var angleDeg = (Math.atan2(obj2.y - obj1.y, obj2.x - obj1.x) * 180 / Math.PI);
//add the offset
angleDeg += offSet;
return angleDeg;
},
update: function() {}
}
