我在libGdx项目中创建了一个对象数组,如下所示:
Array<Bird> birds = new Array<Bird>();
这里Bird是一个对象类。
我想在屏幕上逐个绘制10个Bird对象。所以我确实喜欢这个。
private void MakeBird() {
Bird b = objectFactory.createBird();
for (int i = 0; i < 10; i++) {
birds.add(b);
}
}
objectFactory的createBird方法:
public Bird createBird() {
Bird bird = new Bird();
bird.setPosition(0,0);
return bird;
}
这里我只想要10个对象。但是当我尝试打印数组大小时,它会连续递增。我怎样才能正确实现? 我也想知道如何使用spriteBatch绘制这些数组对象。 如果我用代码得到解释,那将非常有用。
答案 0 :(得分:2)
为了保持birds
数组的大小不变,您需要将MakeBird()
函数修改为此
private void MakeBird() {
int birdsToAdd = 10 - birds.length;
for (int i = 0; i < birdsToAdd ; i++) {
birds.add(objectFactory.createBird());
}
}
您的MakeBird()
版本只会将相同的对象添加十次到birds
数组中。那么,为什么这么糟糕?因为Java对象是引用类型,这意味着如果修改一个对象,则对该对象的所有引用也将更改。在您的情况下,如果您更改阵列中一只鸟的位置,所有鸟的位置都将改变。我不知道这是否是故意的。但是如果你想添加不同的Bird
个对象,你应该像我上面实现的那样使用MakeBird()
函数。很好地抓住了marius。
关于如何将render
这些对象添加到屏幕的第二个查询,您可以做的是,将Bird
类更新为包含render
或{{1}方法(您可以根据需要为方法命名),在主类中,您应该更新draw
方法以调用render
类的render/draw
方法。你可以这样做
Bird
答案 1 :(得分:1)
每次for循环运行都需要创建一个新的Bird
对象。所以请写birds.add(objectFactory.createBird())
而不是birds.add(b)
。我认为应该解决第一个错误。
你需要实现以下内容,就像它被描述为here:
public class Game implements ApplicationAdapter {
private SpriteBatch batch;
private Texture texture;
public void create () {
batch = new SpriteBatch();
texture = new Texture(Gdx.files.internal("example.png"));
}
public void render () {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // This cryptic line clears the screen.
batch.begin();
batch.draw(texture, 10, 10);
batch.end();
}
}
但我真的建议你使用Box2D,因为它非常易于使用,你可以找到很多教程。