Today I was optimizing my code, when I stumbled into weird things.

I have some FlxSprite that I used for debuging, and I calculate the angle between them using FlxAngle.

I was thinking that maybe FlxPoint takes less memory or something, so I replaced the FlxSprite by some FlxPoint.

But now I have different results. Here's an example:

```
var x1=10;
var y1=400;
var x2=600;
var y2=20;
var startSprite:FlxSprite = new FlxSprite(x1, y1);
var endSprite:FlxSprite = new FlxSprite(x2, y2);
trace(FlxAngle.angleBetween(startSprite, endSprite, true));
// it gives 32.78428086586915 which is correct
var startPoint:FlxPoint = new FlxPoint(x1, y1);
var endPoint:FlxPoint = new FlxPoint(x2, y2);
trace(startPoint.angleBetween(endPoint) - 90);
// I have to substract 90° because 0 is pointing to the up direction for reasons...
// it gives 35.25773195876289 which is wrong
```

Isn't that weird? Or maybe I'm doing something wrong?

So right now I'm staying with invisible FlxSprite...

Thanks for your help.

]]>Today I was optimizing my code, when I stumbled into weird things.

I have some FlxSprite that I used for debuging, and I calculate the angle between them using FlxAngle.

I was thinking that maybe FlxPoint takes less memory or something, so I replaced the FlxSprite by some FlxPoint.

But now I have different results. Here's an example:

```
var x1=10;
var y1=400;
var x2=600;
var y2=20;
var startSprite:FlxSprite = new FlxSprite(x1, y1);
var endSprite:FlxSprite = new FlxSprite(x2, y2);
trace(FlxAngle.angleBetween(startSprite, endSprite, true));
// it gives 32.78428086586915 which is correct
var startPoint:FlxPoint = new FlxPoint(x1, y1);
var endPoint:FlxPoint = new FlxPoint(x2, y2);
trace(startPoint.angleBetween(endPoint) - 90);
// I have to substract 90° because 0 is pointing to the up direction for reasons...
// it gives 35.25773195876289 which is wrong
```

Isn't that weird? Or maybe I'm doing something wrong?

So right now I'm staying with invisible FlxSprite...

Thanks for your help.

]]>`FlxAngle.angleBetween()`

uses the centers of the sprites not their upper left:
```
/**
* Find the angle (in radians) between the two FlxSprite, taking their x/y and origin into account.
**/
public static inline function angleBetween(SpriteA:FlxSprite, SpriteB:FlxSprite, AsDegrees:Bool = false):Float
{
var dx:Float = (SpriteB.x + SpriteB.origin.x) - (SpriteA.x + SpriteA.origin.x);
var dy:Float = (SpriteB.y + SpriteB.origin.y) - (SpriteA.y + SpriteA.origin.y);
if (AsDegrees)
return asDegrees(Math.atan2(dy, dx));
else
return Math.atan2(dy, dx);
}
```

It says

taking their x/y and origin into account

which is their centers by default.

]]>By the way, I didn't put it into my code example, but I gave those sprites a red pixel in order to verify their positions:

```
var startSprite:FlxSprite = new FlxSprite(x1, y1);
startSprite.makeGraphic(1, 1, 0xffff0000);
add(startSprite);
var endSprite:FlxSprite = new FlxSprite(x2, y2);
endSprite.makeGraphic(1, 1, 0xffff0000);
add(endSprite);
```

So if it was a top-left / center problem, the error in the result shouldn't be that big.

Edit:

And by the way, I'm wondering why `FlxAngle.angleBetweenPoint()`

gives the angle between an FlxSprite and an FlxPoint, and not between two FlxPoint... >:(