1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
package jfxbouncingball;
import groovy.lang.Binding;
import groovy.util.GroovyScriptEngine;
import groovy.util.ResourceException;
import groovy.util.ScriptException;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.Bounds;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Sphere;
import javafx.stage.Stage;
import javafx.util.Duration;
public class JFXBouncingBall extends Application {
// public static Circle ball;
public static Sphere ball;
public static Pane canvas;
double deltaX=3;
double deltaY=3;
@Override
public void start(final Stage primaryStage) {
try {
//**********************************************************
Binding sharedVar=new Binding();
String pathScript=System.getProperty("user.dir");
GroovyScriptEngine engine=new GroovyScriptEngine(pathScript);
sharedVar.setVariable("imgNumber", "1");
sharedVar.setVariable("vitesse", 10);
sharedVar.setVariable("ballRayon", 10);
engine.run("monScript.groovy", sharedVar);
int numimg=Integer.parseInt(sharedVar.getVariable("imgNumber").toString(),10);
int vitesse=Integer.parseInt(sharedVar.getVariable("vitesse").toString(),10);
int ballRayon=Integer.parseInt(sharedVar.getVariable("ballRayon").toString(),10);
//***********************************************************
canvas = new Pane();
Image img=new Image(getClass().getResourceAsStream("bball"+numimg+".jpg"));
ImageView imgv=new ImageView(img);
final Scene scene = new Scene(canvas, 800, 450);
primaryStage.setResizable(false);
primaryStage.setTitle("Boucing Ball JavaFX");
primaryStage.setScene(scene);
primaryStage.show();
//ball = new Circle(10, Color.BLUEVIOLET);
ball=new Sphere(ballRayon);
PhongMaterial phong=new PhongMaterial();
phong.setSpecularMap(new Image(getClass().getResourceAsStream("imp32.jpg")));
phong.setDiffuseMap(new Image(getClass().getResourceAsStream("imp32.jpg")));
//phong.setSelfIlluminationMap(new Image(getClass().getResourceAsStream("imp32.jpg")));
phong.setSpecularPower(1.0);
ball.setMaterial(phong);
ball.relocate((int)(Math.random()*700), (int)(Math.random()*400));
canvas.getChildren().addAll(imgv,ball);
final Timeline boucle = new Timeline(new KeyFrame(Duration.millis(vitesse), (final ActionEvent t) -> {
ball.setLayoutX(ball.getLayoutX() + deltaX);
ball.setLayoutY(ball.getLayoutY() + deltaY);
final Bounds limites = canvas.getBoundsInLocal();
final boolean atRightBorder = ball.getLayoutX() >= (limites.getMaxX() - ball.getRadius());
final boolean atLeftBorder = ball.getLayoutX() <= (limites.getMinX() + ball.getRadius());
final boolean atBottomBorder = ball.getLayoutY() >= (limites.getMaxY() - ball.getRadius());
final boolean atTopBorder = ball.getLayoutY() <= (limites.getMinY() + ball.getRadius());
if (atRightBorder || atLeftBorder) {
deltaX *= -1;
}
if (atBottomBorder || atTopBorder) {
deltaY *= -1;
}
}));
boucle.setCycleCount(Timeline.INDEFINITE);
boucle.play();
} catch (IOException | ResourceException | ScriptException ex) {
Logger.getLogger(JFXBouncingBall.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void main(final String[] args) {
launch(args);
}
} |