Первое, что вам нужно сделать, это получить мышью pos и позицию игрока в одной и той же системе координат. Когда вы получаете нашу мышку, она обычно находится в экранных координатах, в то время как ваш игрок может находиться в вашем собственном пространстве «Мировые координаты». Если позиция игроков привязана непосредственно к пикселям, то вы можете пропустить.
Преобразовать положение мыши в мировые координаты.
mouseWorld.X = (mouseScreen.X / screenWidth) * worldWidth;
Когда вы находитесь в той же системе координат, вам нужно найти угол, необходимый для поворота. Это уравнение будет меняться в зависимости от того, в какую сторону направлен рисунок вашего игрока, предположим, что он направлен вверх по оси X. Тогда вы можете просто использовать точечное произведение, чтобы найти угол между тем, куда смотрит ваш игрок и точкой, на которую указывает точка.
The dot product is A(dot)B = mag(A) * mag(B) * cos (theta)
mag = magnitude of the vector
theta = angle between the two vectors
So if you normalize the vectors (make them length 1) then..
A(dot)B = 1 * 1 * cos(theta)
A(dot)B = cos(theta)
acos(A(dot)B) = theta
Итак, давайте сделаем код ...
Vector mouseVec(mouseWorld.X, mouseWorld.Y);
Vector playerVec(playerWorld.X, playerWorld.Y);
//You want to find the angle the player must turn, so pretend the player pos it the origin
mouseVec -= playerVec;
//Create a vector that represents which way your player art is facing
Vector facingVec(1, 0);
mouseVec.Normalize(); //Make their length 1
facingVec.Normalize();
double dotProd = mouseVec.dot(facing);
double angBetween = acos(dotProd);
затем вызовите 'rotate' и передайте angBetween!
Дважды проверьте правильность единиц измерения, часто acos возвращает «радианы», а функция поворота принимает «градусы», поэтому вам нужно конвертировать.
Больше векторной информации:
Векторная информация