Ich habe ein Spiel mit einigen Asteroid-Objekten in einer Arraylist. Um meinen Code sauber und tighten zu halten, möchte ich diese Arraylist an verschiedene Klassen/Methoden weitergeben. Ich dachte, ich hätte es herausgefunden ... aber anscheinend nicht. Hier gehts: Meine Level1-Klasse beginnt mit einer Initialisierungsmethode (init), die die populateAsteroid-Methode in der Asteroid-Klasse aufruft. Die Level1-Klasse enthält außerdem eine Update-Funktion, die die Asteroiden-Arraylist durchläuft und aktualisiert. All dies funktioniert:Arraylist wird zurückgegeben Null
public class Level1 {
private Asteroid populateAsteroid
private Collision collision;
public void init() {
populateAsteroid = new Asteroid();
// create and populate an arraylist with asteroid objects
populateAsteroid.populateAsteroid(1);
collision = new Collision();
}
public void update() {
// get the arraylist
ArrayList<Asteroid> asteroidList = populateAsteroid.getAsteroidList();
for(int i = 0; i < asteroidList.size(); i++) {
Asteroid a = asteroidList.get(i);
a.update(i);
}
collision.checkCollision();
}
}
public class Asteroid {
public ArrayList<Asteroid> asteroidList;
public void populateAsteroid(int level) {
// if the arraylist is null, as when the function is called by init, create the array
if (asteroidList == null){
asteroidList = new ArrayList<Asteroid>();
}
for (int i = 1 + asteroidList.size(); i <= (asteroidsAtEachLevel[level]); i++){
Asteroid a = new Asteroid();
asteroidList.add(a);
}
}
public ArrayList<Asteroid> getAsteroidList() {
return asteroidList;
}
}
Jedoch kommt die Probleme in meiner Kollision Klasse, durch die Update-Funktion in der Ebene 1-Klasse aufgerufen, die die checkCollision Methode
public class Collision {
private Asteroid a;
public void checkCollision(){
a = new Asteroid();
// get the arraylist
ArrayList<Asteroid> asteroidList = a.getAsteroidList();
if (asteroidList == null){
System.out.println("null");}
}
..."more code"....
Die Liste ist null enthält, obwohl ich glaube, dass ich die Arraylist identisch mit der Art erhalte, wie ich sie in der Level1.update Funktion mache. Liegt es daran, dass die Arraylist nicht sichtbar ist, wie sie von einem Aufruf in der Level1-Klasse erzeugt wird? Irgendwelche Vorschläge?
Sie rufen 'populateAsteroid' niemals auf' a', so dass die Liste nie erstellt wird. – resueman
Sie bevölkern nie den Asteroiden, daher ist seine Liste immer noch 'null'. Wussten Sie vielleicht, dass Sie das, was Sie erstellt haben, in Ihrer 'init()' Methode verwenden und stattdessen ein neues (leeres) in 'checkCollision()' erstellen? – azurefrog
Sie sagen 'a = new Asteroid();' und dann 'a.getAsteroidList();' nennen. Dies initialisiert die Asteroidenliste nicht – Orin