我在LibGDX中使用spriteBatch绘制TextureRegions时遇到了一些问题。
所以我有一个托管游戏逻辑的主类。 在构造函数中,我有:
atlas = new TextureAtlas(Gdx.files.internal("sheet.txt") );
this.loadTileGFX();
loadTileGFX()方法执行此操作:
roseFrames = new ArrayList<AtlasRegion>();
roseFrames.add(atlas.findRegion("Dirt", 0));
roseFrames.add(atlas.findRegion("Dirt", 1));
roseFrames.add(atlas.findRegion("Dirt", 2));
roseFrames.add(atlas.findRegion("Dirt", 3));
然后我将AtlasRegions的arrayList传递给对象:
///in the main class
rsoe = new RoseSquare(roseFrames, st, col, row, tileWidth);
//in the constructor for the object to draw
this.textureRegions = roseFrames;
然后我调用的每个render()循环:
batch.begin();
rose.draw(batch);
batch.end()
rose.draw()方法如下所示:
public void draw(SpriteBatch batch){
batch.draw(this.textureRegions.get(1), rect.x, rect.y, rect.width, rect.height);
}
但事实是,这并没有在屏幕上画任何东西。
但是这就是事。 如果我将代码更改为:
public void draw(SpriteBatch batch){
batch.draw(new TextureAtlas(Gdx.files.internal("sheet.txt")).findRegion("Dirt", 0)), rect.x, rect.y, rect.width, rect.height);
}
然后它正确绘制。 任何人都可以了解我可能会遇到的错误吗? 保持明确我没有任何错误与“没有绘制”代码。 另外,我可以跟踪this.textureRegions.get(1)的详细信息,它们都是正确的....
感谢。
答案 0 :(得分:0)
如果你需要绘制一个具有纹理的数组,你可以这样做:
batch.begin();
for (Ground ground : groundArray){
batch.draw(ground.getTextureRegion(), ground.x, ground.y);
}
batch.end();
如您所见,我在这里绘制TextureRegion。
中查看相关课程和其他信息回答提请的评论:
public TextureRegion customGetTextureRegion(int i){
switch(i){
case 1: return atlas.findRegion("dirt1"); break;
case 2: return atlas.findRegion("dirt2"); break;
case 3: return atlas.findRegion("dirt3"); break;
}
}
答案 1 :(得分:0)
我找到了解决自己问题的方法。
我还在绘制一些调试ShapeRenderer的东西。
问题似乎是libGDX不像SpriteBatch和ShapeRenderer那样&#34; on&#34;同时:
//LibGDX Doesn't like this:
spriteBatch.begin();
shapeRenderer.begin(ShapeType.Line);
shapeRenderer.drawRect(x, y, width, height);
shapeRenderer.end();
sprtieBatch.draw(texRegion, x, y, width, height);
spriteBatch.end();
它更喜欢:
//LibGDX likes this:
shapeRenderer.begin(ShapeType.Line);
shapeRenderer.drawRect(x, y, width, height);
shapeRenderer.end();
spriteBatch.begin();
sprtieBatch.draw(texRegion, x, y, width, height);
spriteBatch.end();
感谢大家的回复。