NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: JavaFX -animace

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
dawes12
Člen
Avatar
dawes12:22.2.2016 19:24

Dobrý den, chtěl bych se zeptat jak zjistit polohu určitého tělesa při animaci.Protože když jsem zjišťoval polohu u kuličky ,tak mi to vždy vypíše polohu ze který začíná animace.

label.setText(Double.toString(circle_1.getCenterX()));
 
Odpovědět
22.2.2016 19:24
Avatar
Odpovídá na dawes12
Petr Štechmüller:22.2.2016 20:13

Ahoj, jestli používáš tvary od JavaFX, tak můžeš získat polohu kuličky pomocí listeneru, který se spustí při změně polohy kuličky.

// Definuji si nějakou kuličku
Circle circle = new Circle(10, 10, 10);

// Nastavím jí listener, který reaguje na změnu polohy (pouze X-ové souřdadnice)
circle.centerXProperty().addListener(new ChangeListener<Number>() {
    @Override
    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
        System.out.printf("Old x: %s, new x: %s%n", oldValue, newValue);
    }
});

// Nebo zkrácená verze pomocí lambda výrazu:
circle.centerXProperty().addListener((observable, oldValue, newValue) -> {
    System.out.printf("Old x: %s, new x: %s%n", oldValue, newValue);
});
Nahoru Odpovědět
22.2.2016 20:13
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
dawes12
Člen
Avatar
dawes12:22.2.2016 21:35

Když to spustím tak kulička se pohybuje ale nic se nezobrazí.Neměla by tam bát jiná animace ?

@Override
    public void initialize(URL url, ResourceBundle rb) {

        Anim_kulic = new TranslateTransition(Duration.seconds(2), circle);
        Anim_kulic.setFromX(-100);
        Anim_kulic.setFromY(10);
        Anim_kulic.setToX(-200);
        Anim_kulic.setToY(40);
        Anim_kulic.setCycleCount(Timeline.INDEFINITE);
        Anim_kulic.setAutoReverse(true);
        Anim_kulic.play();

circle.centerXProperty().addListener((ObservableValue<? extends Number>observable, Number newValue)->{
label.setText("X je:"+Double.toString((double) newValue));
 
Nahoru Odpovědět
22.2.2016 21:35
Avatar
Petr Štechmüller:22.2.2016 21:54

Ty totiž neměníš X-ocou pozici, ale pouze upravuješ X-ovou translaci. Zkus toto:

public class App extends Application {

    private final Duration duration = Duration.millis(100);
    private final KeyFrame oneFrame = new KeyFrame(duration, event -> update());
    private final Timeline timeline = new Timeline(oneFrame);

    Circle circle = new Circle(90, 90, 50);

    @Override
    public void start(Stage primaryStage) throws Exception {
        Parent parent = new Pane(circle);


        circle.setFill(Color.GREEN);
        circle.centerXProperty().addListener((observable, oldValue, newValue) -> {
            System.out.printf("Old x: %s, new x: %s%n", oldValue, newValue);
        });


        primaryStage.setScene(new Scene(parent));

        primaryStage.setWidth(600);
        primaryStage.setHeight(400);

        primaryStage.show();


        timeline.setCycleCount(100);
        timeline.play();
    }

    private void update() {
        double x = circle.getCenterX();
        circle.setCenterX(x + 5);
    }
}

Používej tlačítko Odpovědět

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
22.2.2016 21:54
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
dawes12
Člen
Avatar
Odpovídá na Petr Štechmüller
dawes12:22.2.2016 22:05

Trochu se to seká, ale dík.

 
Nahoru Odpovědět
22.2.2016 22:05
Avatar
dawes12
Člen
Avatar
Odpovídá na dawes12
dawes12:22.2.2016 22:09

ne dobrý jde to dobře

 
Nahoru Odpovědět
22.2.2016 22:09
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.