Ok I found why it wasn't working correctly.
I use a vertexArray for drawing my player and the position of each verticies is the position of the player and in the Draw() method I did this
states.Transform *= Transform;
So the position of each verticies (the player's position) was calculated twice.