【问题标题】:LibGDX how to use different batches in one StageLibGDX 如何在一个 Stage 中使用不同的批次
【发布时间】:2016-01-14 01:32:25
【问题描述】:

我将 LibGDX 与 Scene2D 一起用于我的 java 游戏。我知道我的问题与 Scene2D 相关,因为我使用了 EXACT 相同的类,通常将其传递给 SpriteBatch(而不是通过 Stage 实例)并且它按预期工作。

我让 Stage 管理所有作为演员的可绘制实体。它使用 Batch 的实现者绘制所有内容; SpriteBatch 是默认设置。它一直在工作,直到我想绘制一个多边形,它必须由 PolygonSpriteBatch 绘制,而不是 SpriteBatch。所以在一个 Stage.draw() 调用期间,我需要同时使用它们。

我创建了一个 CheckedPolygon 类,它基本上是两个 PolygonSprite 相互叠加(一个是半透明的)。暂时结束draw()方法传入的SpriteBatch,暂时开启PolygonSpriteBatch,绘制多边形,关闭。

输出是空屏,我什么也得不到。同样,当我不使用 Stage 类时它也有效。

这是课程,因此您可以更好地理解。 注意:我知道这在性能方面很糟糕,因为我不处理 Texture 并为一个对象保留 Batch,但这是为了简单起见。 NOTE2:是的,我把它正确地传递给了stage,代码被执行了,我通过调试检查了。

public class CheckedPolygon extends Actor {
    private final PolygonSprite mBackground, mCross;
    private final PolygonSpriteBatch mPolygonSpriteBatch;
    private final Camera mCamera;

    public CheckedPolygon(Camera camera, float[] vertices, short[] triangles) {
        super();
        mCamera = camera;
        mPolygonSpriteBatch = new PolygonSpriteBatch();

        Texture textureBack = new Texture(Gdx.files.internal("source/back.png"));
        textureBack.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat);
        PolygonRegion regionBack = new PolygonRegion(new TextureRegion(textureBack), vertices, triangles);
        mBackground = new PolygonSprite(regionBack);

        Texture textureCross = new Texture(Gdx.files.internal("source/cross.png"));
        textureCross.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat);
        PolygonRegion regionCross = new PolygonRegion(new TextureRegion(textureCross), vertices, triangles);
        mCross = new PolygonSprite(regionCross);
    }

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

        mPolygonSpriteBatch.setProjectionMatrix(mCamera.combined);
        mPolygonSpriteBatch.begin();

        mBackground.draw(mPolygonSpriteBatch);
        mCross.draw(mPolygonSpriteBatch);

        mPolygonSpriteBatch.end();

        batch.begin();

    }
}

我是这样使用它的:

CheckedPolygon polygon = new CheckedPolygon(mStage.getCamera(), mTextureAtlas, new float[]{0, 500, 0, 0, 0, 500}, new short[]{0, 1, 2});
mStage.addActor(polygon);

我检查了 PolygonSprite.getVertices() 和 PolygonSprite.getBoundingRectangle() 方法的值,得到了一些奇怪的输出...

【问题讨论】:

    标签: java android libgdx polygon scene2d


    【解决方案1】:

    您创建了一个无效的多边形,其中 0,500 是第一个点和最后一个点。

    所以你需要选择有效的顶点,例如:

    new float[] {0, 0, 0, 500, 500, 500}
    

    我创建了一个小图像来可视化它。上面的线是你的“多边形”,下面的三角形是一个多边形,上面有顶点:

    您从多边形精灵返回的顶点是正常的,因为它们包含x, y, color, u, v

    【讨论】:

    • 感谢您的回答。我没有尝试更改BatchStage。我只是在draw() 方法中使用了不同的“批处理”(参见有问题的代码)。它只是因为Stage 所做的一些背景工作而不起作用。
    • 对不起,误解了你的问题,我更新了我的答案。
    • 嗯,这是我做过的最愚蠢的事情之一......谢谢!
    猜你喜欢
    • 2018-08-18
    • 2021-07-07
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 2020-10-24
    • 2015-09-03
    • 1970-01-01
    相关资源
    最近更新 更多