Hey,
Ich muss gerade an der Schule ein Java Projekt bewerkstelligen wo ich Bomberman programmiere.
Habe nur gerade ein Problem das ich nicht gelöst bekomme.
Habe einen MainThread der sich um eigentlich alles Kümmert auch mit 60 fps cap, sowie Tripple Buffering beim rendern etc.
Nun so wie es bei Bomberman üblig ist kann man ja Bomben legen und die Explodieren nach einer weile.
Das hab ich mit ner zugehörigen TimerTask gelöst in der jeweiligen Objektklasse.
Problem nun beim spielen, ich hab ne for schleife die mir die Objekte die ich in eine LinkedList mit meiner Methode addObject() hinzufügt sowie mit removeObject() wieder entfernt.
Und manchmal interrupten die sich und ich kriege als index für mein temporäres Objekt null raus, weiß selbst nicht genau warum... = Java.lang.NullPointerException
PS. hab nicht mehr so viel Zeit für das Projekt und sitze da schon seit Ewigkeiten dran. Ich bedanke mich herzlich für jeden Vorschlag und kurzen Kommi.
Public class Handler läuft die Objekte in der LinkedList durch und rendert sie.
public class Handler {
public LinkedList<GameObject> object = new LinkedList<GameObject>();
GameObject tempObject;
Bomb bomb;
Game game;
public int plantedBombs, MaxBombs = 100;
public synchronized void tick() {
for (int i = 0; i < object.size(); i++) {
tempObject = object.get(i);
tempObject.tick(object);
}
}
public void render(Graphics g) {
if (tempObject != null) {
for (int i = 0; i < object.size(); i++) {
tempObject = object.get(i);
tempObject.render(g);
}
}
}
public void addObject(GameObject tempObject) {
this.object.add(tempObject);
}
public void removeObject(GameObject tempObject) {
this.object.remove(tempObject);
}
}
Bombenklasse mit dem Timer der Probleme macht.
public class Bomb extends GameObject {
private Handler handler;
private Bomb thisInstance = this;
public int plantedBombs, MaxBombs = 100;
LinkedList<GameObject> object;
GameObject tempObject;
public Bomb(float x, float y, ObjectId id, Handler handler) {
super(x, y, id);
this.handler = handler;
Timer timer = new Timer();
timer.schedule(task(), 3000);
}
public void tick(LinkedList<GameObject> object) {
}
public void render(Graphics g) {
g.setColor(Color.blue);
g.fillRect((int) x, (int) y, 50, 50);
}
public Rectangle getBounds() {
return new Rectangle((int) x, (int) y, 33, 33);
}
public TimerTask task() {
return new TimerTask() {
public void run() {
System.out.println("remove");
handler.removeObject(thisInstance);
handler.plantedBombs--;
}
};
}
Error:
Exception in thread "Thread-2" java.lang.NullPointerException
at java.util.LinkedList.node(Unknown Source)
at java.util.LinkedList.get(Unknown Source)
at com.davidkowal.bomber.window.Handler.render(Handler.java:37)
at com.davidkowal.bomber.window.Game.render(Game.java:121)
at com.davidkowal.bomber.window.Game.run(Game.java:90)
at java.lang.Thread.run(Unknown Source)
Ich muss gerade an der Schule ein Java Projekt bewerkstelligen wo ich Bomberman programmiere.
Habe nur gerade ein Problem das ich nicht gelöst bekomme.
Habe einen MainThread der sich um eigentlich alles Kümmert auch mit 60 fps cap, sowie Tripple Buffering beim rendern etc.
Nun so wie es bei Bomberman üblig ist kann man ja Bomben legen und die Explodieren nach einer weile.
Das hab ich mit ner zugehörigen TimerTask gelöst in der jeweiligen Objektklasse.
Problem nun beim spielen, ich hab ne for schleife die mir die Objekte die ich in eine LinkedList mit meiner Methode addObject() hinzufügt sowie mit removeObject() wieder entfernt.
Und manchmal interrupten die sich und ich kriege als index für mein temporäres Objekt null raus, weiß selbst nicht genau warum... = Java.lang.NullPointerException
PS. hab nicht mehr so viel Zeit für das Projekt und sitze da schon seit Ewigkeiten dran. Ich bedanke mich herzlich für jeden Vorschlag und kurzen Kommi.
Public class Handler läuft die Objekte in der LinkedList durch und rendert sie.
public class Handler {
public LinkedList<GameObject> object = new LinkedList<GameObject>();
GameObject tempObject;
Bomb bomb;
Game game;
public int plantedBombs, MaxBombs = 100;
public synchronized void tick() {
for (int i = 0; i < object.size(); i++) {
tempObject = object.get(i);
tempObject.tick(object);
}
}
public void render(Graphics g) {
if (tempObject != null) {
for (int i = 0; i < object.size(); i++) {
tempObject = object.get(i);
tempObject.render(g);
}
}
}
public void addObject(GameObject tempObject) {
this.object.add(tempObject);
}
public void removeObject(GameObject tempObject) {
this.object.remove(tempObject);
}
}
Bombenklasse mit dem Timer der Probleme macht.
public class Bomb extends GameObject {
private Handler handler;
private Bomb thisInstance = this;
public int plantedBombs, MaxBombs = 100;
LinkedList<GameObject> object;
GameObject tempObject;
public Bomb(float x, float y, ObjectId id, Handler handler) {
super(x, y, id);
this.handler = handler;
Timer timer = new Timer();
timer.schedule(task(), 3000);
}
public void tick(LinkedList<GameObject> object) {
}
public void render(Graphics g) {
g.setColor(Color.blue);
g.fillRect((int) x, (int) y, 50, 50);
}
public Rectangle getBounds() {
return new Rectangle((int) x, (int) y, 33, 33);
}
public TimerTask task() {
return new TimerTask() {
public void run() {
System.out.println("remove");
handler.removeObject(thisInstance);
handler.plantedBombs--;
}
};
}
Error:
Exception in thread "Thread-2" java.lang.NullPointerException
at java.util.LinkedList.node(Unknown Source)
at java.util.LinkedList.get(Unknown Source)
at com.davidkowal.bomber.window.Handler.render(Handler.java:37)
at com.davidkowal.bomber.window.Game.render(Game.java:121)
at com.davidkowal.bomber.window.Game.run(Game.java:90)
at java.lang.Thread.run(Unknown Source)