Avatar
dawes12
Člen
Avatar
dawes12:

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. února 19:24
Avatar
Odpovídá na dawes12
Petr Štechmüller:

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. února 20:13
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
dawes12
Člen
Avatar
dawes12:

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. února 21:35
Avatar
Petr Štechmüller:

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í
+1 bodů
Řešení problému
Nahoru Odpovědět 22. února 21:54
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
dawes12
Člen
Avatar
Odpovídá na Petr Štechmüller
dawes12:

Trochu se to seká, ale dík.

 
Nahoru Odpovědět 22. února 22:05
Avatar
dawes12
Člen
Avatar
Odpovídá na dawes12
dawes12:

ne dobrý jde to dobře

 
Nahoru Odpovědět 22. února 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.