4

クラスの画面に単純な四角形を描画し、それをアクターとして使用しようとしています。

しかし、私が何をしても、透明に描画するオプションはないようです。誰もこれを行う方法を知っていますか? 前もって感謝します!

public class AreaColorRect extends Actor {

    public float opacity = 0.0f;
    private Color shapeFillColor = new Color();
    public Rectangle area;
    public ShapeRenderer shapeRen;

    public AreaColorRect(float x, float y, float w, float h) {
        shapeRen = new ShapeRenderer();
        this.area = new Rectangle(x, y, w, h);
    }


    @Override
    public void draw(SpriteBatch batch, float parentAlpha) {
        shapeRen.begin(ShapeType.Filled);
        shapeRen.setColor(new Color(shapeFillColor.r, shapeFillColor.g, shapeFillColor.b,
            0.0f));
        shapeRen.rect(area.x, area.y, area.width, area.height);
        shapeRen.end();
    }

    public void setShapeFillColor(float r, float g, float b) {
        this.shapeFillColor = new Color(r, g, b, 1);
    }

}
4

3 に答える 3

5

コンテキストを混合しています。SpriteBatchを開始する前に終了してくださいShapeRendererlibgdx - Group.draw の ShapeRenderer が間違った色でレンダリングされるを参照してください。ただし、これは問題ではないかもしれません。

また、ブレンドをオンにする必要があります。これをグローバルに 1 回行うか、必要に応じて有効にする (および無効にする) ことができます。SpriteBatchコンテキストで有効にする必要がありますが、 ShapeRenderer.

Gdx.graphics.getGL10().glEnable(GL10.GL_BLEND); // Or GL20

背景とアクタをレンダリングする順序も、透明度に違いをもたらします。

最後に、不透明度を 0 に設定したので、オブジェクトは完全に見えなくなります。それは通常、まったく何もしません。(現在の 100% 表示から変更しようとしているだけだと思いますか?)

于 2013-05-07T19:20:29.770 に答える
2

ゲームに Scene2d を使用することに決めたのですが、同じ質問にたどり着きました。四角形をアクターとして使用し、画面に描画するにはどうすればよいですか?

次に、libgdx wikiでこのドキュメントを見つけました (デフォルトでは、Scene2d にはアクターの描画を処理する SpriteBatch があります)

アクターが別の方法で描画を実行する必要がある場合 (ShapeRenderer を使用する場合など)、バッチを終了し、メソッドの最後で再度開始する必要があります。もちろん、これによりバッチがフラッシュされるため、慎重に使用する必要があります。バッチからの変換行列と射影行列を使用できます。

private ShapeRenderer renderer = new ShapeRenderer();

public void draw (Batch batch, float parentAlpha) {
    batch.end();

    renderer.setProjectionMatrix(batch.getProjectionMatrix());
    renderer.setTransformMatrix(batch.getTransformMatrix());
    renderer.translate(getX(), getY(), 0);

    renderer.begin(ShapeType.Filled);
    renderer.setColor(Color.BLUE);
    renderer.rect(0, 0, getWidth(), getHeight());
    renderer.end();

    batch.begin();
}
于 2014-11-19T12:27:49.947 に答える
2

掘り下げてすみません。ただし、あなたは Android にタグを付けているので、私の経験を少しだけ入れようと思いました。私は最近、アルファ ブレンディングが機能しないという問題に 4 時間近く費やしました。

libgdx'AndroidApplicationConfigurationはデフォルトでアルファ チャネルに 0 ビットを使用することが判明しました。これがあなたにも当てはまる場合は、initialize()アプリを作成する前に、それをより賢明なものに変更する価値があるかもしれません.

于 2014-01-17T16:02:42.453 に答える