我在Scene2D中为我的java游戏使用LibGDX。我知道我的问题已连接到Scene2D,因为我使用了EXACT相同的类,通常将它传递给SpriteBatch(而不是通过Stage实例),并且按预期工作。LibGDX如何在一个阶段中使用不同的批次
我让舞台管理我的所有绘制实体,这些实体是演员。它使用Batch的实现者绘制所有内容; SpriteBatch是默认的。它一直在工作,直到我想绘制一个多边形,它必须由PolygonSpriteBatch绘制,而不是SpriteBatch。因此,在一个Stage.draw()调用中,我需要使用它们。
我做了一个CheckedPolygon类,它基本上是在彼此顶部绘制的两个PolygonSprites(一个是半透明的)。在draw()方法中传递的SpriteBatch暂时结束以启用PolygonSpriteBatch片刻,绘制多边形并禁用它。
而输出是空的屏幕,我什么都没得到。再说一次,当我没有使用Stage类时它就起作用了。
这是班级,让你更好地理解。 注意:我知道这在性能方面不好,因为我不处理Texture并为一个对象保留批处理,但是这是为了简单起见。注2:是的,我把它正确地传递给舞台,代码被执行,我通过调试进行了检查。
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(),并得到了一些奇怪的输出...
谢谢你的回答。我没有尝试改变'Stage'的'Batch'。我在'draw()'方法中使用了不同的'Batch'(请参阅相关代码)。它只是因为'Stage'的一些背景东西而不起作用。 –
对不起,误解了你的问题,我更新了我的答案。 –
嗯,那是我做过的最愚蠢的事情之一...谢谢! –