2016-12-15 40 views
0

我创建对象的数组在我libGdx项目是这样的:LibGdx对象数组

Array<Bird> birds = new Array<Bird>(); 

这鸟是一个对象类。

我想在屏幕上逐一绘制10个Bird对象。所以我喜欢这样。

public Bird createBird() { 
    Bird bird = new Bird(); 
    bird.setPosition(0,0); 
    return bird; 
} 

在这里,我想只有10 objects.But当我尝试打印数组的大小,它增加continuousely.How我可以正确地实现这一点:

private void MakeBird() { 

    Bird b = objectFactory.createBird(); 

    for (int i = 0; i < 10; i++) { 
     birds.add(b); 

    } 

} 

objectFactory对象的createBird方法? 我也想知道如何使用spriteBatch绘制这些数组对象。 如果我通过代码获得解释,这将非常有帮助。

+0

你的'MakeBird()'方法创建一个鸟并将它添加到数组十次,这可能不是你想要的。至于大小不断增加,你是在每一帧而不是一次调用'MakeBird()'? – Tenfour04

回答

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类包含renderdraw方法是什么(你可以命名任何你想要的方法),并在第二个查询您的主课程你应该更新你的render方法来调用Bird类的render/draw方法。你可以这样做

//Bird class 
class Bird { 
    //Your data members 
    //Your member functions 

    public void draw(SpriteBatch batch) { 
     batch.draw(some_bird_image, bird_x_position, bird_y_position); 
    } 
} 

//Render method in main class 
public void render() { 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    batch.begin(); 
    for(Bird bird : birds) { 
     bird.draw(batch); 
    } 
    batch.end(); 
} 
1

您必须为每个for-loop运行创建一个新的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,因为它非常易于使用,你可以找到大量的教程吧。