2017-07-22 10 views
1

Je dois créer une application JavaFX qui génère un chemin sous la forme d'un symbole infini, puis créer un rectangle qui se déplacera sur ce chemin. Jusqu'à présent, je sais créer un cercle et un carré et avec transitionPath pour déplacer ce rectangle, mais comment créer une forme d'infini? Je suis très frais dans JavaFX (et dans le développement aussi bien) donc s'il vous plaît ne soyez pas dur :)JavaFX: Dessiner un symbole infini et avancer

Voici mon code avec la forme Cercle:

import javafx.animation.PathTransition; 
import javafx.animation.Timeline; 
import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.layout.Pane; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Rectangle; 
import javafx.scene.shape.Circle; 
import javafx.stage.Stage; 
import javafx.util.Duration; 

public class PathTransitionDemo extends Application { 
@Override 
public void start(Stage primaryStage) { 

Pane pane = new Pane(); 


Rectangle rectangle = new Rectangle (0, 0, 25, 50); 
rectangle.setFill(Color.ORANGE); 

Circle circle = new Circle(125, 100, 50); 
circle.setFill(Color.WHITE); 
circle.setStroke(Color.BLACK); 

pane.getChildren().add(circle); 
pane.getChildren().add(rectangle); 

PathTransition pt = new PathTransition(); 
pt.setDuration(Duration.millis(4000)); 
pt.setPath(circle); 
pt.setNode(rectangle); 
pt.setOrientation(
PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT); 
pt.setCycleCount(Timeline.INDEFINITE); 
pt.setAutoReverse(true); 
pt.play(); 

circle.setOnMousePressed(e -> pt.pause()); 
circle.setOnMouseReleased(e -> pt.play()); 

Scene scene = new Scene(pane, 250, 200); 
primaryStage.setTitle("PathTransitionDemo"); // Unos nayiva pozornice e 
primaryStage.setScene(scene); 
primaryStage.show(); 
} 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

Je regardais partout pour quelque soupçon, mais sans chance :(

Répondre

1

Je trouve sur le web un chemin SVG pour dessiner une forme de « l'infini », donc remplacer votre circle avec:

SVGPath svg = new SVGPath(); 
svg.setFill(Color.TRANSPARENT); 
svg.setStrokeWidth(1.0); 
svg.setStroke(Color.BLACK); 
svg.setContent("M 787.49,150 C 787.49,203.36 755.56,247.27 712.27,269.5 S 622.17,290.34 582.67,279.16 508.78,246.56 480,223.91 424.93,174.93 400,150 348.85,98.79 320,76.09 256.91,32.03 217.33,20.84 130.62,8.48 87.73,30.5 12.51,96.64 12.51,150 44.44,247.27 87.73,269.5 177.83,290.34 217.33,279.16 291.22,246.56 320,223.91 375.07,174.93 400,150 451.15,98.79 480,76.09 543.09,32.03 582.67,20.84 669.38,8.48 712.27,30.5 787.49,96.64 787.49,150 z"); 

et de l'utiliser pour le dessin, la transition et le chat de l'événement ching. Vous devrez peut-être l'adapter à vos besoins.

Si vous recherchez de meilleures formes "infini", recherchez "lemniscate".

+0

Jean-Baptiste Yunès merci beaucoup d'avoir aidé ces jeunes passionnés! Il fonctionne comme un charme :) –