megmut Posted February 6, 2016 Share Posted February 6, 2016 I'm trying to connect two sprites with a line (also a sprite). I tried using the code : return this._game.math.angleBetweenY(this._node1.x, this._node1.y, this._node2.x, this._node2.y) * 57.2958; This returned a value of 46.68470101066656 and was incorrectly calculating the angle between two objects. I wrote my own function using JavaScript's Math.atan2 function, like this : calcAngle2() { let dx = this._node1.x - this._node2.x; let dy = this._node1.y - this._node2.y; let theta = Math.atan2(dy, dx); theta *= 180 / Math.PI; return theta + 180; } This returned a value of 43.31531568210369. Please see the attached images for demo. Am I using phaser's angleBetweenY incorrectly, or is there an issue when using sprites? Thanks! Link to comment Share on other sites More sharing options...
Tom Atom Posted February 6, 2016 Share Posted February 6, 2016 Hi, thi is Phaser source for angleBetweenY: /** * Find the angle of a segment from (x1, y1) -> (x2, y2). * Note that the difference between this method and Math.angleBetween is that this assumes the y coordinate travels * down the screen. * * @method Phaser.Math#angleBetweenY * @param {number} x1 * @param {number} y1 * @param {number} x2 * @param {number} y2 * @return {number} The angle, in radians. */ angleBetweenY: function (x1, y1, x2, y2) { return Math.atan2(x2 - x1, y2 - y1); } You have switched x and y arguments - your method is like angleBetween(), not angleBetweenY(). Regarding results: 46.68470101066656 + 43.31531568210369 = 90 Link to comment Share on other sites More sharing options...
Recommended Posts