Поверните TextButton с помощью libgdx

У меня есть textButton, и я хочу разместить его на экране, повернутом на 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);

Это почти сработало, то есть текст в кнопке был повернут правильно, но фон кнопки остался на месте:

введите здесь описание изображения

Итак, мой вопрос: почему это происходит и как я могу это решить?


person Ricardo Simmus    schedule 26.07.2013    source источник


Ответы (3)


Я реализовал вращающиеся виджеты в соответствии с документацией.

Вот мой код:

Table buttonContainer = new Table(skin);
buttonContainer.setTransform(true);
buttonContainer.add(button1);
buttonContainer.row().pad(10);
buttonContainer.add(button2);
rotatingActor = buttonContainer;

а потом:

rotatingActor.setRotation(newDegree);

Все обработчики кликов и т. д. работают должным образом, даже если виджет повернут.

person morpheus05    schedule 29.07.2013

Существует проблема проекта, которая закрыта как выигранная. т исправить.

Ни один из элементов пользовательского интерфейса в scene2d нельзя повернуть из-за того, что отсечение реализовано с помощью ножниц. Ножницы требуют выровненных по оси прямоугольников.

person Vikas Sardana    schedule 28.07.2013
comment
Хорошо, но это не значит, что вращение с помощью матричных преобразований нельзя реализовать. - person Ricardo Simmus; 29.07.2013

Методы поворота существующих Актеров должны работать. Вероятно, стоит задать еще один вопрос, чтобы отследить эту проблему.

Я вижу как минимум две проблемы:

  1. матрица пакетного преобразования по умолчанию, вероятно, не является матрицей идентичности. Может быть, инициализировать rotationMatrix как копию oldMatrix?

  2. Вы вращаетесь вокруг действительно произвольного вектора (нарисуйте линию от начала координат - в левом нижнем углу до верхнего левого угла вашей кнопки). Попробуйте Vector3(0, 1, 0).

person P.T.    schedule 27.07.2013
comment
Вращение с другими векторами не помогло. Но метод setTrasform() объекта TextButton помог повернуть текст кнопки, но не саму кнопку (P.S. Я обновил вопрос) - person Ricardo Simmus; 27.07.2013