Завъртете 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)


Приложих въртящи се Widgets според документацията

Ето моят код:

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

Има проблем с проекта, който е приключен, тъй като няма t фиксирам.

Нито един от елементите на потребителския интерфейс в 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