我正在使用libgdx 1.2.0 + eclipse。 我想在我的游戏画面中从一个类中绘制多个精灵,但只绘制了一个精灵。 这是我的渲染方法
@Override
public void render(float delta) {
Gdx.gl.glClearColor(100/255f, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
if(Gdx.input.justTouched()){
touchX = Gdx.input.getX();
touchY = Gdx.input.getY();
//for(int i=0; i < enemy.length; i++)
//System.out.println(enemy[i].x + " " + enemy[i].y);
}
for(int i=0; i< enemy.length; i++){
enemy[i].update(delta);
if(enemy[i].getSprite().getBoundingRectangle().contains(touchX/ppX, touchY/ppY))
enemy[i].reset();
if(enemy[i].gameOver){
gameOver = true;
//System.out.println("Over");
}
}
game.batch.begin();
//if(!gameOver){
for(int i=0; i < enemy.length; i++)
enemy[i].getSprite().draw(game.batch);
//}
game.batch.end();
}
如果我打电话
,就会发生同样的事情enemy[0].getSprite().draw(game.batch);
enemy[1].getSprite().draw(game.batch);
如果我只打电话给其中一个,它总会吸引一些东西。
这是敌人类。我在每个敌人的实例中从游戏画面类中加载相同的精灵,但是我改变了它的位置。
public class Enemy {
private final float minX=1, minY=2;
private final float maxX=31, maxY=18;
private float x,y;
private float time;
private Sprite sprite;
boolean gameOver;
public Enemy(Sprite sprite){
this.sprite = sprite;
reset();
}
public Sprite getSprite(){
return sprite;
}
public void reset(){
x = minX + (int)(Math.random() * (maxX - minX + 1));
y = minY + (int)(Math.random() * (maxY - minY + 1));
time = 0.0f;
gameOver = false;
sprite.setPosition(x, y);
}
public void update(float delta){
time += delta;
if(time >= 3.0f)
gameOver = true;
}
}
答案 0 :(得分:3)
我在每个实例中从游戏屏幕类加载相同的精灵 敌人,但我改变了它的位置。
问题是,您必须为每个new Sprite()
对象创建Enemy
。但是,当你改变敌人的精灵位置时,所有敌人的位置都会改变。
如您所见,您将与enemy[0].getSprite()
或enemy[1].getSprite()
达到相同的精灵。您可以使用引用相等enemy[0].getSprite()==enemy[1].getSprite()
轻松检查此内容。
您可以使用类似
的方法解决此问题public Enemy(Sprite sprite){
this.sprite = new Sprite(sprite);
reset();
}
代码中的另一个奇怪的事情是:
public void reset(){
x = minX + (int)(Math.random() * (maxX - minX + 1));
y = minY + (int)(Math.random() * (maxY - minY + 1));
time = 0.0f;
gameOver = false;
sprite.setPosition(x, y);
}
如果您执行sprite.setPosition(x, y)
,则修改x
和y
不足以更改精灵的位置。您应该以这种方式改进update(float delta)
方法,以确保精灵的位置得到正确更新。
public void update(float delta){
time += delta;
if(time >= 3.0f)
gameOver = true;
sprite.setPosition(x, y);
}