2016-12-15 5 views
0

ich ein Array von Objekten in meinem Libgdx Projekt wie dieses erstellt haben:Libgdx Objektarray

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

Hier Bird ist eine Objektklasse.

Ich möchte 10 Vogel Objekte eins nach dem anderen auf dem Bildschirm zu zeichnen. So habe ich das getan.

private void MakeBird() { 

    Bird b = objectFactory.createBird(); 

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

    } 

} 

createBird Methode von Object:

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

Hier möchte ich nur 10 objects.But, wenn ich versuche, die Array-Größe zu drucken, wird das Inkrementieren continuousely.How kann ich das richtig umsetzen? Ich möchte auch wissen, wie diese Array-Objekte mit SpriteBatch zeichnen. Es wird sehr hilfreich sein, wenn ich eine Erklärung mit Code bekomme.

+0

Ihre 'MakeBird()' Methode erstellt einen einzelnen Vogel und fügt es dem Array zehn Mal, was wahrscheinlich nicht das ist, was Sie wollen. Wenn Sie die Größe kontinuierlich erhöhen, rufen Sie 'MakeBird()' bei jedem Frame anstatt nur einmal auf? – Tenfour04

Antwort

2

Um die Größe des birds Array-Konstante Sie Ihre MakeBird() Funktion in diesem

private void MakeBird() { 
    int birdsToAdd = 10 - birds.length; 
    for (int i = 0; i < birdsToAdd ; i++) { 
     birds.add(objectFactory.createBird()); 
    } 
} 

Ihre Version von MakeBird() zu halten müssen einfach das gleiche Objekt zehnmal in die birds Array hinzufügen würde ändern. Also, warum ist das schlimm? Da Java-Objekte ein Referenztyp sind, bedeutet dies, dass sich beim Ändern eines Objekts auch alle Referenzen auf dieses Objekt ändern. Wenn Sie in einem Fall die Position eines Vogels im Array ändern, ändert sich die Position aller Vögel. Ich weiß nicht, ob das beabsichtigt ist. Aber wenn Sie verschiedene Bird Objekte hinzufügen möchten, dann sollten Sie die MakeBird() Funktion verwenden, wie ich oben ausgeführt. Netter Fang dort durch marius.

Was Ihre zweite Abfrage darüber, wie diese Objekte auf den Bildschirm render, was Sie tun können, Ihre Bird Klasse aktualisieren, um einen render oder eine draw Methode enthalten (die Methode nennen können, was Sie wollen) und in Ihrem Hauptklasse sollten Sie Ihre render Methode aktualisieren, um die render/draw Methode der Bird Klasse aufzurufen. Sie können dies als solches tun

1

Sie haben ein neues Objekt Bird jeden for-Schleife laufen zu schaffen. Schreiben Sie also birds.add(objectFactory.createBird()) anstelle von birds.add(b). Ich denke, das sollte den ersten Fehler beheben.

Sie müssen irgendwie folgendes implementieren, wie es here beschrieben, wird in:

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(); 
    } 
} 

Aber ich empfehle Ihnen wirklich Box2D zu verwenden, da es sehr zu verwenden ist zu erleichtern und Sie können es viele Tutorials zu finden.