libGDX: Sprite и поворот

Попросили для Bomberman’a сделать возможность управлять стрелками, а не джоем. При чём, хотели возможность самим задавать положение всех 4-х стрелок. Вместо того, что бы рисовать все 4, тем самым забивая лишними битами атлас, решил всего одну стрелку сделать, а потом просто поворачивать. Довольно забавно ведут себя методы по повороту спрайта.

Вообще, изначально хотел SpriteBatch заюзать. В одном из определений метода draw есть возможность поворота: draw(Texture texture, float x, float y, float originX, float originY, float width, float height, float scaleX, float scaleY, float rotation, int srcX, int srcY, int srcWidth, int srcHeight, boolean flipX, boolean flipY). Слишком громоздкий. Я помню, что у Sprite есть метод по повороту rotate(degrees). Довольно удобный, не так ли? Использовал, стал отлаживать. И как-то странно он поворачивает спрайты. Долго мучился, не мог понять в чём трабл. Додумался всё же включить режим отладки. Я для всех проектов режим отладки делаю. В играх, к примеру, когда его включаю, то контуры всех элементов, пути и многое другое показывается.

Оказалось, что поворачивает он не относительно центра ректангла, а относительно левого нижнего угла. Что-то мне лень было нормировать потом координаты, решил глянуть другие методы. Есть интересный метод rotate90(arg0). Из названия вроде понятно, что метод поворачивает спрайт на 90 градусов. Ради интереса его заюзал. Оказалось, он поворачивает спрайт относительно центра, что мне и надо было. Довольно странно это всё. Хорошо, что мне надо поворачивать на углы кратные 90. В ином случае после поворота методом rotate(degrees) придётся корректировать координаты.

  Категории: java, libgdx, Коддинг
  • Pingback: libGDX: поворот текстуры при рендеринге | Suvitruf's Blog()

  • 1nt3g3r

    Спрайты и актеры поворачиваются относительно getOriginX() getOriginY(). По умолчанию, они выставлены в ноль. Вызовите setOriginX(getWidth()/2), setOriginY(getHeight()/2), и все будет так, как вы хотели. Код для последней версии либгдкс, то есть, уже сеттеры и геттеры.

    • http://suvitruf.ru Suvitruf

      Да, не подумал об этом)

      Уже свой костыль сделал =D