Java LibGDX如何在一个阶段中使用不同批次
我在java游戏中使用LibGDX和Scene2D。我知道我的问题与Scene2D有关,因为我使用了完全相同的类将其正常地传递给SpriteBatch(而不是通过Stage实例),并且它按照预期工作 我让舞台管理我所有的可绘制实体,它们是演员。它使用批处理的实现器绘制所有内容;SpriteBatch是默认设置。它一直在工作,直到我想画一个多边形,它必须由PolygonSpriteBatch,而不是SpritteBatch绘制。。所以在一个Stage.draw()调用中,我需要同时使用它们 我制作了一个CheckedPolygon类,它基本上是两个相互重叠的多边形(一个是半透明的)。draw()方法中传递的SpriteBatch将暂时结束。要启用PolygonSpriteBatch,请先绘制多边形,然后将其禁用 而输出是空屏幕,我什么也得不到。再说一次,在我不上舞台课的时候,它也起作用了 这是课程,让你更好地理解。 注意:我知道这在性能方面是不好的,因为我不处理纹理并为一个对象保留批处理,但这是为了简单起见。 注2:是的,我把它正确地传递给了stage,代码被执行了,我通过调试进行了检查Java LibGDX如何在一个阶段中使用不同批次,java,android,libgdx,polygon,scene2d,Java,Android,Libgdx,Polygon,Scene2d,我在java游戏中使用LibGDX和Scene2D。我知道我的问题与Scene2D有关,因为我使用了完全相同的类将其正常地传递给SpriteBatch(而不是通过Stage实例),并且它按照预期工作 我让舞台管理我所有的可绘制实体,它们是演员。它使用批处理的实现器绘制所有内容;SpriteBatch是默认设置。它一直在工作,直到我想画一个多边形,它必须由PolygonSpriteBatch,而不是SpritteBatch绘制。。所以在一个Stage.draw()调用中,我需要同时使用它们 我制作
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()
方法中使用了不同的“批处理”(请参阅相关代码)。这只是因为阶段的一些背景知识不起作用。对不起,误解了你的问题,我更新了我的答案。这是我做过的最愚蠢的事情之一。。。非常感谢。