Android Libgdx Sprite.draw()赢得';我什么也不画
我正在为Android制作一个游戏。 我正在使用Libgdx作为我正在开发的一个游戏的框架,我在绘制精灵方面遇到了困难。常规的SpriteBatch.draw()可以正常工作,但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
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坐标都是零,我还需要进一步研究。