Objekte animieren mit Threads

zipmar

Mitglied
hallo community!

ich schreibe mir ein kleines spiel in java , so ist der plan:rtfm:, jedoch habe ich ein problem bei der
animation.
ich habe mir das 2d tutorial hier aus dem link angesehen von zet.....com und habe recht nett damit experimentiert, jedoch stockt es immer beim selben. Animation;(
kann auch sein das ich da was dauerhaft überlese:bahnhof:

wie bekomme ich mehrere unterschiedliche objekte in verschiedenen geschwindigkeiten animiert?

Java:
public void run() {
        long beforeTime, timeDiff, sleep;
        beforeTime = System.currentTimeMillis();
        while (true) {
            bob1(); // ball 1
            bob2(); // ball 2
            bob3(); // ball 3
            repaint();
            timeDiff = System.currentTimeMillis() - beforeTime;
            sleep = DELAY - timeDiff;
            if (sleep < 0){
                sleep = 10;
            }
            try {
                Thread.sleep(sleep);
            } catch (InterruptedException e) {
                // do nothing
            }
            beforeTime = System.currentTimeMillis();
        }
    }

so setze ich immer alle meine objekte in tiefschlaf:autsch:
wo liegt mein denkfehler, bzw. habe ich den falschen ansatz? könnt ihr mir helfen , bitte ?

grüße
zipmar
 
was meinst du mit
..., jedoch stockt es immer beim selben. Animation
? Meinst du dass die Objekte beim Bewegen "flackern"?

kann auch sein das ich da was dauerhaft überlese
ist leicht möglich 😀

wie bekomme ich mehrere unterschiedliche objekte in verschiedenen geschwindigkeiten animiert?
ich würde mir ein Objekt (Ball) erstellen, der zb. einen Parameter speed hat. Somit kannst du jedem der Bälle (Objekt) verschiedene Geschwindigkeiten setzen 😉
 
flackern habe ich keins, da ich double buffering verwende.🙂

das der ball als eigendes objekt vorhanden sein soll, hab ich mir auch schon überlegt.
speed im konstruktor wäre auch ok, aber wie umsetzen?

für jedes ball objekt, dann einen thread erstellen? geht sowas nicht an die performance ran :bahnhof:

😛opcorn:
 
das der ball als eigendes objekt vorhanden sein soll, hab ich mir auch schon überlegt.
speed im konstruktor wäre auch ok, aber wie umsetzen?

naja, eine Klasse Ball hat zb. aktuelle xKoordinate, yKoordinate, radius und schlussendlich speed. Wenn du dann deine Elemente bewegst, kannst du einfach immer ball1.getXKoordinate+=speed (oder multiplizieren, jenachdem wie du speed verwenden willst) und dann neu zeichnen. Somit hat jedes Element seine eigene Geschwindigkeit.

für jedes ball objekt, dann einen thread erstellen? geht sowas nicht an die performance ran
Grundsätzlich kannst du alle Bälle in einem Thread zeichnen, wenn du richtig vorgehst. Du müsstest eine Liste von Bällen haben, die du in einer Schleife alle immer neu zeichnest. Somit kannst du zur Runtime Bälle hinzufügen und entfernen. Auch stoppen kannst du sie, indem du einfach speed auf 0 setzt.

Du kannst aber auch für jeden Ball einen eigenen Thread erstellen, was ich persönlich (je nach Anzahl der Bälle) schöner finden würde. Bei wenigen Bällen musst du auf die Performanz nicht zwingend acht geben, sollten es mehr werden, würde ich die Variante mit den einzelnen Threads bevorzugen, da so jeder Thread "nur" seinen eigenen Ball zeichnen muss, und nicht ein Thread alle zeichnen muss, egal ob er sich bewegt oder nicht..
 
Spiele sind normalerweise immer so aufgebaut:

Java:
public void mainLoop(){
    while(running){
        for(Ball ball : baelle){
            ball.logic(); //hier bewegst du den Ball
        }
        for(Ball ball : baelle){
            ball.render(); //hier zeichnest du den Ball
        }
    }
}
 

Zurück
Oben