[英]Drawing sprites in libgdx
我打电话时得到了NullPoinerExecption
enemy.getSprite().draw(batch);
我必须在哪里初始化我的精灵? 它在主类中起作用,但是如果我尝试在Enemy构造函数中初始化纹理和子画面,则会给我错误。
这是我的主要课程 :
public class SpaceShooter implements ApplicationListener {
private SpriteBatch batch;
private Texture texture;
private Sprite sprite, spriteEnemy;
private Player p;
private Enemy enemy;
@Override
public void create() {
p = new Player();
enemy = new Enemy(spriteEnemy);
float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();
batch = new SpriteBatch();
texture = new Texture(Gdx.files.internal("craft.png"));
sprite = new Sprite(texture);
sprite.setPosition(w/2 -sprite.getWidth()/2, h/2 - sprite.getHeight()/2);
// Adding enemy sprite
}
@Override
public void dispose() {
batch.dispose();
texture.dispose();
}
@Override
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
// moving sprite left and right
batch.begin();
sprite.draw(batch);
enemy.getSprite().draw(batch);
batch.end();
}
敌人阶级
public class Enemy {
private Sprite sprite;
private Texture texture;
boolean gameOver;
public Enemy(Sprite sprite){
this.sprite = new Sprite();
}
public Sprite getSprite(){
return sprite;
}
public void create() {
texture = new Texture(Gdx.files.internal("enemy.png"));
sprite = new Sprite(texture);
this.sprite.setPosition(100, 200);
}
您从未在Enemy实例上调用过create()
,因此Enemy中的纹理和精灵不会被实例化。 在create()
方法中调用enemy.create()
。 或简化事情,然后将敌人enemy.create()
的代码enemy.create()
Enemy构造函数中。
同样,在您的Enemy构造函数中,您将实例化一个无用的Sprite实例,该实例不引用Texture,一旦对敌人调用create()
,该实例将被丢弃。 而且构造函数甚至不使用传入的Sprite引用(尽管您现在无论如何都只是传入null
,因为spriteEnemy
类中的spriteEnemy
从未实例化)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.