JavaFX Animation, Kreise im vorgegebem Takt durchs Fenster laufen lassen

wolfgang63

Bekanntes Mitglied
Hallo,
ich möchte einfach auf einem Panel gefüllte Kreise im wählbaren Abstand durchs Fenster laufen lassen.
Habe es schon mit Translation versucht. Leider hab ich keine kontinuirliche Bewegung. Es gibt immer mal wieder ein zuckeln beim Durchlauf. Muss ich das in einem eigenen Thread starten, damit nicht irgenwelche Aktualisierungen die Animation beeinflussen? Oder ist das ein Hardwareproblem? Ich arbeite unter Linux-Mint 17.1 mit einer Radeon Grafikkarte. Wie würdet ihr den Programmansatz wählen damit die Kreise kontinuirlich durchs Bild laufen?
Mein Gedanke ist, in einer Schleife z.B. 100 Kreise erstellen lassen und diese dann mittels Translation über einen Timer starten lassen. Wäre für bessere Ansätze dankbar.
 
ohne code keine chance da irgendwas zu sagen zu können.
Überschreibst du die Paint? machst du das über Sub-Components? ein Mockup wäre auch schön? code? was meinst du mit Translation?
 
Zuletzt bearbeitet:
Das ist mein bisheriger Code,

Code:
package circleanimation;

import javafx.animation.Interpolator;
import javafx.animation.TranslateTransition;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;

public class CircleAnimation extends Application {

    @Override
    public void start(Stage stage) {
        Group root = new Group();
        Scene scene = new Scene(root, 500, 200, Color.WHITE);

        // Blöcke erzeugen
        Group g = new Group();
        for (int i = 0; i < 5; i++) {
            Circle c = new Circle();
            c.setCenterX(600 + i * 50);
            c.setCenterY(20);
            c.setRadius(10.0);
            c.setFill(Color.RED);
            g.getChildren().add(c);
        }
        root.getChildren().add(g);

        // Animation erzeugen
        TranslateTransition tt = new TranslateTransition(Duration.millis(4000), g);
        tt.setByX(-900.0);
        tt.setCycleCount(4);
        tt.setInterpolator(Interpolator.LINEAR);
        tt.setAutoReverse(true);
        //tt.getOnFinished();
        tt.play();

        stage.setTitle("JavaFX CircleAnimation");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
 
Zuletzt bearbeitet:
Ich habe in einem Projekt für die Arbeit ein Seitenmenü mittels translate implementiert. Mir ist dabei nur aufgefallen, dass es stark Hardware- und Systemabhängig zu sein scheint. Die Anwendung läuft bei mir unter Win7 tadellos, aber auf meiner Entwicklungsmaschiene mit Ubuntu und dem Intel-Treiber (der AMD-Chipsatz ist bei mir nicht aktiv) erzeugt die Anwendung im Betrieb, wenn alle Animationen angesteuert werden, enorme Last auf dem System.
Vielleicht kannst du uns mal deine Specs schicken. Und vielleicht schaust du mal, dass bei dir nicht das Software-Rendering verwendet wird.
Ansonsten zum Code: Ich habe mir lediglich den expliziten Interpolator zu Setzen gespart. Der Rest sieht ähnlich aus.
 

Zurück
Oben