LibGDX:似乎无法在数组中绘制对象

时间:2014-06-25 23:50:37

标签: java arrays libgdx

敌人等级

public class Enemy extends Sprite{

private Vector2 velocity = new Vector2(0,0);
private float speed = 30, gravity = 30 * 1.8f;


public Enemy(Sprite sprite){
    super(sprite);
}

public void draw(SpriteBatch spriteBatch){
    update(Gdx.graphics.getDeltaTime());
    super.draw(spriteBatch);
}

public void update(float delta) {

    velocity.y -= gravity * delta;
    setY(velocity.y + speed * delta);
}

}

PlayScreen类

public class PlayScreen implements Screen {
    private Player player;
    private OrthographicCamera camera;
    private OrthogonalTiledMapRenderer renderer;
    private TiledMap map;
    private Rectangle rightRectangle, leftRectangle, playerRectangle;

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        renderer.render();
        renderer.getSpriteBatch().begin();
        player.draw(renderer.getSpriteBatch());

        boolean wallLeft = leftRectangle.overlaps(player.rectangle);
        boolean wallRight = rightRectangle.overlaps(player.rectangle);

        if(wallLeft){
            System.out.println("wallLeft Overlap");
            player.velocity.x = 0;
        }
        else if(wallRight){
            System.out.println("wallRight Overlap");
            player.velocity.x = 0;
        }

        enemies = new ArrayList<Enemy>();
        enemy = new Enemy(new Sprite(new Texture("img/player.png"))));

        enemies.add(new Enemy(new Sprite(new Texture("img/player.png"))));
        enemies.add(new Enemy(new Sprite(new Texture("img/player.png"))));


        for(it = enemies.iterator(); it.hasNext();){

        enemy.draw(renderer.getSpriteBatch());
        enemy.setOrigin(500, 500);

        }


        renderer.getSpriteBatch().end();

    }
    @Override
    public void resize(int width, int height) {
        camera.viewportWidth = width;
        camera.viewportHeight = height;
        camera.update();
    }
    @Override
    public void show() {
        camera = new OrthographicCamera();
        map = new TiledMap();
        renderer = new OrthogonalTiledMapRenderer(map);

        player = new Player(new Sprite(new Texture("img/player.png")));
        rightRectangle = new Rectangle(1280,0,0,720);
        leftRectangle = new Rectangle(0,0,0,720);

        player.setPosition(
            Gdx.graphics.getWidth()/2f - player.getWidth()/2f,
            Gdx.graphics.getHeight()/2f - player.getHeight()/2f 
                - Gdx.graphics.getHeight()/5f);
    }
}

所以如果我要运行它,应用程序就会冻结,不会再响应了。我相信问题是当我尝试将'Enemy'添加到PlayScreen类中时。之前,当我没有将“Enemy”课程纳入项目时,它运行良好。我想要做的是,在敌人阵列中吸引每个敌人,然后设定他们的位置。

1 个答案:

答案 0 :(得分:1)

是的,你在这里错过it.next()以推进循环。

for(it = enemies.iterator(); it.hasNext();){

    enemy.draw(renderer.getSpriteBatch());
    enemy.setOrigin(500, 500);

 }

我认为您不希望每次都绘制相同的enemy,因此您应该在此循环的开头设置enemy = it.next()

此外,我不确定它的后端如何工作,但我很确定你不想在下面的代码片段中加载同一个精灵的3个副本。你应该加载精灵一次,并为每个敌人使用相同的精灵

enemy = new Enemy(new Sprite(new Texture("img/player.png"))));
enemies.add(new Enemy(new Sprite(new Texture("img/player.png"))));
enemies.add(new Enemy(new Sprite(new Texture("img/player.png"))));