Hi
Zurzeit Entwickle ich ein 2D Spiel in Java.Leider habe ich seit einiger Zeit ein Problem auf dessen Lösung ich einfach nicht komme :bahnhof: .Wie man schon dem Titel entnehmen kann, laggt das Spiel nach einiger Zeit tierisch rum.Das laggen wird durch nichts hervorgerufen sondern tritt beliebig auf.Es fängt langsam an, und wird dann immer schlimmer bis es dann komplett abstürzt.Beim Taskmanager habe ich beobachtet dass das Spiel, wenn der Fehler auftritt immer mehr Ram und CPU Leistung verbraucht.
Ich weiß nicht woran es liegt,meine Vermutung ist aber, das Irgendetwas mit den Threads nicht stimmt.Nachdem ich die Thread "synchronized" habe und Thread.yield(); Eingesezt habe, tritt das problem erst später auf.Es ist aber nur eine Vermutung,dass es an den Threads liegt. Da Eclipse keine Exception wirft macht es die Fehlersuche ziemlich kompiliziert^^.
Hier mal die beiden Threads:
Und hier der Andere:
Mein Betriebssystem ist Win7 (64bit) und die neueste Java version (auch 64 bit) habe ich mir gerade eben nochmal geholt.
Ich hoffe ihr könnt mir helfen,falls ihr nochmehr Infos braucht sacht bescheid .
LG Pansa
Zurzeit Entwickle ich ein 2D Spiel in Java.Leider habe ich seit einiger Zeit ein Problem auf dessen Lösung ich einfach nicht komme :bahnhof: .Wie man schon dem Titel entnehmen kann, laggt das Spiel nach einiger Zeit tierisch rum.Das laggen wird durch nichts hervorgerufen sondern tritt beliebig auf.Es fängt langsam an, und wird dann immer schlimmer bis es dann komplett abstürzt.Beim Taskmanager habe ich beobachtet dass das Spiel, wenn der Fehler auftritt immer mehr Ram und CPU Leistung verbraucht.
Ich weiß nicht woran es liegt,meine Vermutung ist aber, das Irgendetwas mit den Threads nicht stimmt.Nachdem ich die Thread "synchronized" habe und Thread.yield(); Eingesezt habe, tritt das problem erst später auf.Es ist aber nur eine Vermutung,dass es an den Threads liegt. Da Eclipse keine Exception wirft macht es die Fehlersuche ziemlich kompiliziert^^.
Hier mal die beiden Threads:
Java:
long lastFrame = System.currentTimeMillis();
while(true){
synchronized (frame) {
long thisFrame = System.currentTimeMillis();
float timeSinceLastFrame = (float) ((thisFrame - lastFrame)/1000.0);
lastFrame = thisFrame;
frame.update(timeSinceLastFrame);
frame.repaint();
try{
Thread.sleep(0);
} catch (InterruptedException e){
e.printStackTrace();
}
}
Thread.yield();
}
}
Und hier der Andere:
Java:
@Override
public void run(){
while(true){
synchronized (this) {
if(changed){
for(int i = 0;i < enemies.size();i++){
enemies.get(i).setPath(graph.astar(graph.getNodeID(enemies.get(i).getTilePosX(), enemies.get(i).getTilePosY()),
graph.getNodeID(world.getPlayerTilePosX(), world.getPlayerTilePosY())));
}
for(int i = 0;i < hamarrtroll.size();i++){
hamarrtroll.get(i).setPath(graph.astar(graph.getNodeID(hamarrtroll.get(i).getTilePosX(), hamarrtroll.get(i).getTilePosY()),
graph.getNodeID(world.getPlayerTilePosX(), world.getPlayerTilePosY())));
}
}
changed = false;
try {
Thread.sleep(0);
} catch (InterruptedException e){
e.printStackTrace();
}
}
Thread.yield();
}
}
}
Mein Betriebssystem ist Win7 (64bit) und die neueste Java version (auch 64 bit) habe ich mir gerade eben nochmal geholt.
Ich hoffe ihr könnt mir helfen,falls ihr nochmehr Infos braucht sacht bescheid .
LG Pansa