zoukankan      html  css  js  c++  java
  • Java-javaFx库运用-自动弹跳的球

    (1)定义一个名为BallPane的类,用于显示一个弹动的球;

    (2)定义一个名为BounceBallControl的类,用来使用鼠标动作控制弹球,当鼠标按下的时候动画暂停,当鼠标释放的时候动画恢复执行,按下Up/Down方向键的时候可以增加/减少动画的速度。

    BallPane类:

    import javafx.animation.KeyFrame;
    import javafx.animation.Timeline;
    import javafx.beans.property.DoubleProperty;
    import javafx.scene.layout.Pane;
    import javafx.scene.paint.Color;
    import javafx.scene.shape.Circle;
    import javafx.util.Duration;
    
    public class BallPane extends Pane{
        private double radius = 20;
        private double x = radius, y = radius;
        private double dx = 1, dy = 1;
        private Circle circle = new Circle(x, y, radius);
        private Timeline animation;
        
        public BallPane() {
            circle.setStroke(Color.BLACK);
            circle.setFill(Color.ORANGE);
            getChildren().add(circle);
            
            animation = new Timeline(
                    new KeyFrame(Duration.millis(50), e -> moveBall()));
            animation.setCycleCount(Timeline.INDEFINITE);
            animation.play();
        }
        
        public void play() {
            animation.play();
        }
        
        public void pause() {
            animation.pause();
        }
        
        public void increaseSpeed() {
            animation.setRate(animation.getRate() + 0.1);
        }
        
        public void decreaseSpeed() {
            animation.setRate(animation.getRate() > 0 ? animation.getRate() - 0.1 : 0);
        }
        
        public DoubleProperty rateProperty() {
            return animation.rateProperty();
        }
        
        protected void moveBall() {
            if(x < radius || x > getWidth() - radius) {
                dx *= -1;
            }
            if(y < radius || y > getHeight() - radius) {
                dy *= -1;
            }
            
            x += dx;
            y += dy;
            circle.setCenterX(x);
            circle.setCenterY(y);
        }
    }

    BounceBallControl类:

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.input.KeyCode;
    import javafx.stage.Stage;
    
    public class BounceBallControl extends Application{
    
        @Override
        public void start(Stage primaryStage) throws Exception {
            BallPane ballPane = new BallPane();
            
            ballPane.setOnMousePressed(e -> ballPane.pause());
            ballPane.setOnMouseReleased(e -> ballPane.play());
            
            //控制速度
            ballPane.setOnKeyPressed(e -> {
                if(e.getCode() == KeyCode.UP) {
                    ballPane.increaseSpeed();
                }
                else if(e.getCode() == KeyCode.DOWN) {
                    ballPane.decreaseSpeed();
                }
            });
            
            Scene scene = new Scene(ballPane, 250, 150);
            primaryStage.setTitle("Bounce Ball Control");
            primaryStage.setScene(scene);
            primaryStage.show();
            
            //将输入焦点设置到ballPane上
            ballPane.requestFocus();
        }
        
        public static void main(String[] args) {
            Application.launch(args);
        }
    
    }
  • 相关阅读:
    面试题47题
    深度学习面试
    神经网络训练中的梯度消失与梯度爆炸
    Softmax函数与交叉熵
    sourceTree 添加 ssh key 方法
    request.form()和request()的区别
    C#中Request.ServerVariables详细说明及代理
    Page_Load事件与IsPostBack属性
    CSS中position的absolute和relative用法
    读取游标
  • 原文地址:https://www.cnblogs.com/fredkeke/p/7841101.html
Copyright © 2011-2022 走看看