SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › поворот спрайта в сторону объекта списка › Ответ в теме: поворот спрайта в сторону объекта списка
Не понятна концепция твоей игры.
Если вид сбоку, и персонаж имеет только два направления движения (как в Марио), то задача тривиальна: нужно сравнить положения объектов по оси X, и если объект наблюдатель (тот, кого будем вращать) находится левее объекта наблюдения и при этом он смотрит влево, то поворачиваем его вправо. Аналогично для поворота влево.
Однако если направление измеряется свободными углами (например, вид сверху и направление может быть любым, даже 12,333 градуса) то тогда задача усложняется.
Для этого случая предположим, что объект-наблюдатель имеет координаты (x1; y1), а объект наблюдения – (x2; y2). Тогда угол взгляда будет таким:
1 2 3 4 5 6 7 8 9 |
float angle; if (x2 > x1) angle = atan((y2-y1)/(x2-x1)) + 90.0; else if (x2 != x1) angle = atan((y2-y1)/(x2-x1)) - 90.0; else angle = y2 > y1 ? 180.0 : 0.0; sprite.setRotation(angle); |