2014-12-27 7 views
1

У меня есть радар в моей игре. Сейчас радар работает с использованием статического графика X, Y, который не вращается в зависимости от того, как вы столкнулись в моей игре.Рассчитать новое положение X, Y на основе угла x, y обращено к радару

Я хочу, чтобы позиции X, Y на радаре вращались в зависимости от направления, в котором вы находитесь. Монстры впереди вас всегда появятся на вершине радара.

Прямо сейчас, радар является статичным, а монстры к северу от вас всегда будут появляться на север на радаре.

В настоящее время у меня есть математик так:

int x = (int)(x * Math.Cos(Math.PI * angle/180) + y * Math.Sin(Math.PI * angle/180)); 
int y = (int)(y * Math.Cos(Math.PI * angle/180) - x * Math.Sin(Math.PI * angle/180)); 

Затем я добавляю центр X и Y центра для указанных чисел, но граф странно и, кажется, только для работы с 359 ~ угла степени. Я попытался добавить мой центр X и центр Y перед его вычислением, но он всегда выключен.

Другой код, который я нашел онлайн, дифференцирован по градусам/углу.

if (angle >= 0 && angle <= 180) 
{ 
x = (int)(x * Math.Cos(Math.PI * angle/180) - y * Math.Sin(Math.PI * angle/180)); 
y = (int)(x * Math.Sin(Math.PI * angle/180) + y * Math.Cos(Math.PI * angle/180)); 
} 
else 
{ 
x = (int)(x * Math.Cos(Math.PI * angle/180) - y * Math.Sin(Math.PI * angle/180)); 
y = (int)(x * Math.Sin(Math.PI * angle/180) + y * Math.Cos(Math.PI * angle/180)); 
} 

Что такое правильная формула мне нужно взять Центр X (Сх), центр Y (сУ), угол я столкнулся и цель X (ТХ), цель Y (TY), чтобы переставить мишень X & Y.

ответ

2

Очевидным ответом является использование одного и того же кода поворота, который поворачивает вашу точку зрения для поворота координат радара, но я думаю, вы почему-то отклонили это.

все, что пример кода неправильный x перезаписывается, а затем используется для поиска нового значения для y. Это никогда не сработает.

Основная основная формула вращения выглядит следующим образом:

x2 = (int)(x * Math.Cos(Math.PI * angle/180) - y * Math.Sin(Math.PI * angle/180)); 
y2 = (int)(x * Math.Sin(Math.PI * angle/180) + y * Math.Cos(Math.PI * angle/180)); 

но если плательщик отдаляется от 0,0 вы хотите

x2 = (int)((x - player_x) * Math.Cos(Math.PI * angle/180) - (y - player_y) * Math.Sin(Math.PI * angle/180)); 
y2 = (int)((x - player_x) * Math.Sin(Math.PI * angle/180) + (y - player_y) * Math.Cos(Math.PI * angle/180)); 

, который будет держать 0,0 на радар, центрированный на плеере

dpending о том, как ваша игра измеряет углы, которые вам могут понадобиться, чтобы поменять знак на терминах греха.

+0

Это сработало, я просто удалил вычитание позиции игрока и добавление его после вашей формулы. – Illuminati

Смежные вопросы