2013-07-26 119 views
3

我有一个TEXT按钮,我想将它通过90度旋转的屏幕上。旋转TEXT按钮与libgdx

出于某种原因,旋转的所有方法(旋转(),setRotationAngle()等)与TEXT按钮对象的产生密切相关不正常工作。

所以我实现了新的类扩展TEXT按钮和压倒一切的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度,但是对于某些未知的度数。

enter image description here

UPD

后,我切换回TEXT按钮对象,做:

newGame.setTransform(true); 
newGame.rotate(90); 

它几乎工作意味着在按钮中的文本被corrently旋转,但背景留在它的按钮现货:

enter image description here

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

回答

3

我实现了旋转小工具根据documentation

这里是我的代码:

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

然后:

rotatingActor.setRotation(newDegree); 

所有的点击处理程序等方面的工作,因为即使预期如果小部件旋转。

1

上现有的参与者旋转方法应该工作。可能值得提出另一个问题来追踪这个问题。

我看到至少有两个问题:

  1. 缺省的批处理transorm矩阵可能不是单位矩阵。也许初始化rotationMatrix作为oldMatrix的副本?

  2. 你正在围绕一个真正的任意向量旋转(从原点 - 从左下角到左上角绘制一条线)。尝试Vector3(0, 1, 0)

+0

旋转与其他载体没有帮助。但TextButton对象的方法setTrasform()帮助旋转按钮的文本,但不是按钮本身(P.S我已更新问题) –

2

有一个project issue关闭,因为不会修复。

由于剪切是通过剪切实现的,因此无法旋转scene2d中的所有UI元素。剪刀需要轴对齐的矩形。

+0

好吧,但这并不意味着无法通过矩阵转换实现旋转。 –