4

我有一个 textButton,我想把它放在旋转 90 度的屏幕上。

由于某种原因,与 TextButton 对象关联的所有旋转(rotate()、setRotationAngle() 等)方法都无法正常工作。

所以我实现了扩展 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);

它几乎起作用了,这意味着按钮中的文本被正确旋转,但按钮的背景保持在原位:

在此处输入图像描述

所以我的问题是:为什么会发生这种情况,我该如何解决?

4

3 回答 3

4

我根据文档实现了旋转小部件

这是我的代码:

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

进而:

rotatingActor.setRotation(newDegree);

即使小部件旋转,所有点击处理程序等也会按预期工作。

于 2013-07-29T11:01:44.373 回答
2

有一个项目问题因无法修复而关闭。

由于剪切是通过剪裁实现的,scene2d 中的所有 UI 元素都不能旋转。剪裁需要轴对齐的矩形。

于 2013-07-28T20:46:45.893 回答
1

现有 Actors 的旋转方法应该可以工作。可能值得问另一个问题来追踪该问题。

我至少看到两个问题:

  1. 默认的批量变换矩阵可能不是单位矩阵。也许初始化rotationMatrixoldMatrix?

  2. 您正在围绕一个非常任意的矢量旋转(从原点画一条线——在按钮的左下角到左上角)。试试Vector3(0, 1, 0)

于 2013-07-27T03:05:16.653 回答