ArrayList中的TextureRegion不会绘制到屏幕

时间:2014-08-20 00:55:42

标签: libgdx

我在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)的详细信息,它们都是正确的....

感谢。

2 个答案:

答案 0 :(得分:0)

如果你需要绘制一个具有纹理的数组,你可以这样做:

batch.begin();
for (Ground ground : groundArray){
    batch.draw(ground.getTextureRegion(), ground.x, ground.y);
}
batch.end();

如您所见,我在这里绘制TextureRegion。

您可以在我的答案HEREHERE

中查看相关课程和其他信息

回答提请的评论:

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();

感谢大家的回复。