Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LibGDX如何在一个阶段中使用不同批次_Java_Android_Libgdx_Polygon_Scene2d - Fatal编程技术网

Java LibGDX如何在一个阶段中使用不同批次

Java LibGDX如何在一个阶段中使用不同批次,java,android,libgdx,polygon,scene2d,Java,Android,Libgdx,Polygon,Scene2d,我在java游戏中使用LibGDX和Scene2D。我知道我的问题与Scene2D有关,因为我使用了完全相同的类将其正常地传递给SpriteBatch(而不是通过Stage实例),并且它按照预期工作 我让舞台管理我所有的可绘制实体,它们是演员。它使用批处理的实现器绘制所有内容;SpriteBatch是默认设置。它一直在工作,直到我想画一个多边形,它必须由PolygonSpriteBatch,而不是SpritteBatch绘制。。所以在一个Stage.draw()调用中,我需要同时使用它们 我制作

我在java游戏中使用LibGDX和Scene2D。我知道我的问题与Scene2D有关,因为我使用了完全相同的类将其正常地传递给SpriteBatch(而不是通过Stage实例),并且它按照预期工作

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

我制作了一个CheckedPolygon类,它基本上是两个相互重叠的多边形(一个是半透明的)。draw()方法中传递的SpriteBatch将暂时结束。要启用PolygonSpriteBatch,请先绘制多边形,然后将其禁用

而输出是空屏幕,我什么也得不到。再说一次,在我不上舞台课的时候,它也起作用了

这是课程,让你更好地理解。 注意:我知道这在性能方面是不好的,因为我不处理纹理并为一个对象保留批处理,但这是为了简单起见。 注2:是的,我把它正确地传递给了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()方法的值,得到了一些奇怪的输出


创建的多边形无效,0500是第一个点和最后一个点

因此,您需要选择有效的顶点,例如:

new float[] {0, 0, 0, 500, 500, 500}
我创建了一个小图像来可视化它。上面的线是“多边形”,下面的三角形是一个多边形,上面有顶点:


从多边形精灵返回的顶点在其他方面是可以的,因为它们包含
x,y,color,u,v

谢谢您的回答。我没有尝试更改
阶段的
批处理
。我只是在
draw()
方法中使用了不同的“批处理”(请参阅相关代码)。这只是因为
阶段的一些背景知识不起作用。对不起,误解了你的问题,我更新了我的答案。这是我做过的最愚蠢的事情之一。。。非常感谢。