Поворот TextButton с помощью libgdx
У меня есть текстовая кнопка, и я хочу разместить ее на экране с поворотом на 90 градусов.
По какой-то причине все методы поворота (rotate(), setRotationAngle() и т. Д.), Связанные с объектом TextButton, не работают должным образом.
Итак, я реализовал новый класс, расширяющий TextButton и переопределяющий метод draw():
@Override
public void draw(SpriteBatch batch, float parentAlpha) {
Matrix4 rotationMatrix = new Matrix4();
Matrix4 oldMatrix = batch.getTransformMatrix();
rotationMatrix.idt();
rotationMatrix.rotate(new Vector3(this.getX(),this.getY()+this.getHeight(),0),rotationAngle);
batch.setTransformMatrix(rotationMatrix);
super.draw(batch, parentAlpha);
batch.setTransformMatrix(oldMatrix);
}
куда rotationAngle
равняется 90.0. И по какой-то причине кнопка поворачивается не на 90 градусов, а на какое-то неизвестное количество градусов.
UPD
После того, как я переключился обратно на объект TextButton и сделал:
newGame.setTransform(true);
newGame.rotate(90);
Это почти сработало, означая, что текст в кнопке был повернут по-разному, но фон кнопки остался на месте:
Итак, мой вопрос: почему это происходит и как я могу решить это?
3 ответа
Я реализовал вращающиеся виджеты согласно документации
Вот мой код:
Table buttonContainer = new Table(skin);
buttonContainer.setTransform(true);
buttonContainer.add(button1);
buttonContainer.row().pad(10);
buttonContainer.add(button2);
rotatingActor = buttonContainer;
а потом:
rotatingActor.setRotation(newDegree);
Все обработчики кликов и т. Д. Работают должным образом, даже если виджет вращается.
Существует проблема проекта, которая закрыта, так как не будет устранена.
Ни один из элементов пользовательского интерфейса в scene2d не может быть повернут из-за того, что отсечение реализовано с помощью ножниц. Ножничные требуют прямоугольников, выровненных по оси.
Методы ротации на существующих актерах должны работать. Вероятно, стоит задать еще один вопрос, чтобы отследить эту проблему.
Я вижу как минимум две проблемы:
Матрица пакетного преобразования по умолчанию, вероятно, не является единичной матрицей. Возможно инициализировать
rotationMatrix
как копияoldMatrix
?Вы вращаетесь вокруг действительно произвольного вектора (нарисуйте линию от начала координат - в левом нижнем углу к верхнему левому углу вашей кнопки). Пытаться
Vector3(0, 1, 0)
,