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);
}

は90.0rotationAngleです。何らかの理由で、ボタンは 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

既存のアクタの回転メソッドが機能するはずです。おそらく、その問題を追跡するために別の質問をする価値があります。

少なくとも 2 つの問題があります。

  1. デフォルトのバッチ変換行列は、おそらく恒等行列ではありません。たぶんrotationMatrixのコピーとして初期化しますoldMatrixか?

  2. 本当に任意のベクトルを中心に回転しています (原点からボタンの左下隅まで線を引きます)。試してみてくださいVector3(0, 1, 0)

于 2013-07-27T03:05:16.653 に答える