gpt4 book ai didi

java - LibGDX如何在一个阶段使用不同的批处理

转载 作者:搜寻专家 更新时间:2023-11-01 08:40:25 25 4
gpt4 key购买 nike

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

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

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

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

这是类(class),让您更好地理解。注意:我知道这在性能方面很糟糕,因为我没有处理 Texture 并为一个对象保留 Batch,但这是为了简单起见。NOTE2: 是的,我把它正确地传递到阶段,代码被执行,我通过调试检查。

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

最佳答案

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

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

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

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

enter image description here

你从多边形 Sprite 中得到的顶点在其他方面是没问题的,因为它们包含 x, y, color, u, v

关于java - LibGDX如何在一个阶段使用不同的批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33151125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com