Android Libgdx Sprite.draw()赢得';我什么也不画

Android Libgdx Sprite.draw()赢得';我什么也不画,android,libgdx,sprite,draw,Android,Libgdx,Sprite,Draw,我正在为Android制作一个游戏。 我正在使用Libgdx作为我正在开发的一个游戏的框架,我在绘制精灵方面遇到了困难。常规的SpriteBatch.draw()可以正常工作,但Sprite.draw()不能工作。 这是我的主要课程代码: private OrthographicCamera camera; private Texture currentBackground; private SpriteBatch batch; private Bunker bunke

我正在为Android制作一个游戏。 我正在使用Libgdx作为我正在开发的一个游戏的框架,我在绘制精灵方面遇到了困难。常规的SpriteBatch.draw()可以正常工作,但Sprite.draw()不能工作。 这是我的主要课程代码:

 private OrthographicCamera camera;
    private Texture currentBackground;
    private SpriteBatch batch;
    private Bunker bunker;
    private AssetManagerWrapper assetsManager = new AssetManagerWrapper();
    private Turret turret;

    @Override
    public void create() {
        camera = new OrthographicCamera();
        camera.setToOrtho(false, C.WIDTH_TARGET_RESOLUTION, C.HEIGHT_TARGET_RESOLUTION);
        batch = new SpriteBatch();
        assetsManager.loadGFX();
        assetsManager.finishLoading();
        createBunker();
        currentBackground = assetsManager.get(AssetsPaths.Gfx.Background.CITY_DAY);
    }

    private void createBunker() {
        bunker = new Bunker(assetsManager.get(AssetsPaths.Gfx.Bunker.BUNKER, Texture.class));
        turret = new Turret(assetsManager.get(AssetsPaths.Gfx.Bunker.TURRET, Texture.class), bunker.getCenterX(), (int) (bunker.getY() + bunker.getHeight() - 10));
    }

    @Override
    public void render() {
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        camera.update();
        batch.setProjectionMatrix(camera.combined);
        drawGFX();
    }

    private void drawGFX() {
        batch.begin();
        batch.draw(currentBackground, 0, 0);
        bunker.draw(batch);
        batch.end();
    }


    @Override
    public void dispose() {
        assetsManager.dispose();
    }
沙坑类扩展了名为GameObject的类,该类扩展了精灵。 出于某种原因,这一行:

bunker.draw(batch);
不会画精灵的。但如果我将其更改为:

batch.draw(bunker.getTexture(), bunker.getX(), bunker.getY());
它工作得很好。我知道我可以继续使用这种方式,但我担心它可能会因为我不知道的原因而效率较低

该行:

batch.draw(currentBackground, 0, 0);
工作也很完美

我错过什么了吗

提前谢谢

编辑: 我将沙坑对象的位置更改为x=0和y=0。 这是getVertices()的打印: 0.0, 0.0, -1.7014117E38, 0.0, 0.0, 0.0, 5.9, -1.7014117E38, 0.0, 0.0, 100.0, 59.0, -1.7014117E38, 0.0, 0.0, 100.0, 0.0, -1.7014117E38, 0.0, 0.0

我并没有真正理解这些值,但似乎精灵并没有被画在外面

Bunker类只是扩展了GameObject类:

public class GameObject extends Sprite {

    public GameObject(Texture image, int x, int y) {
        setTexture(image);
        setBounds(x, y, image.getWidth(), image.getHeight());
        setPosition(x, y);
        setOrigin(x, y);
    }
}

可以从libgdx源代码中看到方法sprite.draw,以执行以下操作:

batch.draw(texture, getVertices(), 0, SPRITE_SIZE);
实际上,使用
batch.draw(bunker,
运行它会更有效,因为您不会调用getVertices()方法

编辑:

我可能说得太快了,哪一个更有效,当您调用batch.draw()时,SpriteBatch将最终为您派生顶点。sprite.draw()应该更好,因为顶点已经计算过,并且只有在sprite变脏时才会重新计算。


如果您要通过调用bunker.getVertices()并输出到日志来找出绘制精灵的位置,您可以看到它是否只是在视口之外绘制的。

将此添加到游戏对象的构造器中
super(图像);
而不是
setTexture(image);

你能在附加了沙坑类的情况下进行编辑吗?还是它只是扩展了Sprite?我发布了getVertices()这些顶点看起来很奇怪,它似乎是在画一个多边形而不是一个矩形,而u/v坐标都是零,我还需要进一步研究。