Цитата:
Хорошо вот допустим мои координаты -3245 -1246 546 и вот допустим координаты монстра стоящего рядом - 3216 -1232 543
как мне повернуть к нему камеру если положение камеры по горизонтали почти не меняется это примерно такое значение 4246367457 - 4 Bytes [Nan - Float] может ты знаешь ?))
|
Начнём с того что положение камеры меняется, ты должен был заметить что значение камеры как бы "наматывается" когда ты делаешь полный оборот(360°). Это первый признак неверного размера, проще говоря используй в адресе камеры 2 Byte. Значение будет от 0 - 65536, так ты получишь точный диапазон поворота камеры(дальше пригодится).
Что касается поворота камеры к монстру, для этого нужно приравнять направление игрока(камеры) к направлению моба.
Вспоминаем уроки:
Код:
double player_x = 80;
double player_y = -80;
double mob_x = 0;
double mob_y = 0;
double A = Math.Atan2(player_y - mob_y, player_x - mob_x) / Math.PI * 180;// получаем угол между точками(нужное направление)
double B = Math.Round(Math.Sqrt(Math.Pow(mob_x - player_x, 2) + Math.Pow(mob_y - player_y, 2)));//дистанция между точками(дистанция до моба)
A = (A < 0) ? A + 360 : A; //Без этого диапазон от 0...180 и -1...-180
Console.WriteLine("Direction: " + A);
Console.WriteLine("Distance: " + B);
Теперь зная угол направления на объект(монстра), нужно повернуть игрока(камеру) в данном направлении. Как я указал выше теперь мы имеем точное значение камеры(0 - 65536), но нам нужно приравнять значение угла в градусах. Всё просто, нужно максимальное значение камеры(65536) разделить на максимальное значение угла(360)
65536 / 360 ~ 182 и получаем множитель который будем использовать для корректного значения камеры в градусах.
Ну и собственно итог: угол направления игрока(камеры) = угол между игроком и монстром, умноженный на 182(самое близкое значение).
Пример:
Код:
player_x = -3245 , player_y = -1246 ;
mob_x = -3216 , mob_x = -1232 ;
direction = 206;//
camera_x = direction * 182; //37492
Дальше я надеюсь понятно.