xameal | Bonjour / Bonsoir !
J'ai commencer Java Fx, et j'ai plutôt bien avancer sur le projet que je dois faire, seulement y'a 1 seul petit problème qui persiste et je n'arrive pas à le régler.
Objectif du projet : Faire une animation Java FX ou une balle rebondit partout sur l'écran, et ou sa taille et sa vitesse varie continuellement.
Vous verrez mon code en dessous.
J'arrive à tous faire, sauf à faire varier la vitesse de ma balle.
Enfaîte le problème est plutôt bête, puisque quand je compile, ma balle à une vitesse prédéfinis par ma fonction " speedVariation() ", sauf qu'une fois le programme compilé, elle garde cette même vitesse...
Je voudrais que ma variable vitesse change tous les x secondes par exemples quand le programme est lancé ! Voici mon code :: Code :
- package application;
- import javafx.animation.Interpolator;
- import javafx.animation.KeyFrame;
- import javafx.animation.ScaleTransition;
- import javafx.animation.Timeline;
- import javafx.animation.TranslateTransition;
- import javafx.application.Application;
- import javafx.event.ActionEvent;
- import javafx.event.EventHandler;
- import javafx.geometry.Bounds;
- import javafx.scene.Scene;
- import javafx.scene.layout.Border;
- import javafx.scene.layout.BorderPane;
- import javafx.scene.paint.Color;
- import javafx.scene.shape.Circle;
- import javafx.stage.Stage;
- import javafx.util.Duration;
- public class Main extends Application {
- public boolean speedVariation() {
- int number = (int) (1 + (Math.random()*((100-1)+1)));
- if (number>=50) {
- return true;
- };
- return false;
- }
- @Override
- public void start(Stage primaryStage) {
- try {
- BorderPane root = new BorderPane();
- Scene scene = new Scene(root, 1280, 660, Color.YELLOW);
- Circle cercle = new Circle(20, Color.RED);
- Bounds bounds = root.getBoundsInLocal();
- ScaleTransition scaleAnimation = new ScaleTransition(Duration.seconds(1), cercle);
- cercle.relocate(10, 10);
- root.getChildren().add(cercle);
- primaryStage.setTitle("JavaFx Project" );
- primaryStage.setScene(scene);
- primaryStage.show();
- // Here there are the different functions for my ball to change size continuously
- scaleAnimation.setAutoReverse(true);
- scaleAnimation.setCycleCount(Timeline.INDEFINITE);
- scaleAnimation.setFromX(1);
- scaleAnimation.setToX(2);
- scaleAnimation.setFromY(1);
- scaleAnimation.setToY(2);
- scaleAnimation.setInterpolator(Interpolator.LINEAR);
- scaleAnimation.play();
- Timeline timeline = new Timeline(new KeyFrame(Duration.millis(20), new EventHandler<ActionEvent>() {
- double dx = speedVariation() ? 8 : 1;
- double dy = speedVariation() ? 8 : 1;
- // Fr : La balle bouge et rebondit / En : My ball move and bounces
- @Override
- public void handle(ActionEvent t) {
- cercle.setLayoutX(cercle.getLayoutX() + dx);
- cercle.setLayoutY(cercle.getLayoutY() + dy);
- // Si la balle touche le mur de droit ou de gauche, elle rebondit
- if (cercle.getLayoutX() <= (bounds.getMinX() + cercle.getRadius())
- || cercle.getLayoutX() >= (bounds.getMaxX() - cercle.getRadius())) {
- dx = -dx;
- }
- // Si la balle touche le mur de bas ou du haut, elle rebondit
- if ((cercle.getLayoutY() >= (bounds.getMaxY() - cercle.getRadius()))
- || (cercle.getLayoutY() <= (bounds.getMinY() + cercle.getRadius()))) {
- dy = -dy;
- }
- }
- }));
- timeline.setCycleCount(Timeline.INDEFINITE);
- timeline.play();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- launch(args);
- }
- }
|
J'espère que mon code est plutôt clair, et je vous remercie déjà pour l'attention que vous allez apporter à mon problème.
Xameal. |