2015-10-15 84 views
1

我在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(),并得到了一些奇怪的输出...

Output image

回答

3

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

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

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

我创建了一个小图像进行可视化。在顶部的行是你的“多边形”,下面的三角形是从上方顶点的多边形:你

enter image description here

顶点从多边形精灵背后,是否则正常的,因为它们含有x, y, color, u, v

+0

谢谢你的回答。我没有尝试改变'Stage'的'Batch'。我在'draw()'方法中使用了不同的'Batch'(请参阅相关代码)。它只是因为'Stage'的一些背景东西而不起作用。 –

+0

对不起,误解了你的问题,我更新了我的答案。 –

+0

嗯,那是我做过的最愚蠢的事情之一...谢谢! –

相关问题