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);
        }
    
    }
  • 相关阅读:
    asList和subList的缺陷
    oracle和mysql的拼接查询
    Google Guava的splitter用法
    docker创建mongodb并且测试代码
    GitHub 近两万Star,无需编码,可一键生成前后端代码,这个开源项目JeecgBoot有点强
    在深圳养一个娃需要多少钱?2020深圳养娃开销(Excel文本)清单公布!家长直呼扎心了!
    Win7安装AD域管理工具-Win7安装AD域远程服务器管理工具
    盘点2020年那些大厂网盘小厂网盘其他网络存储设备
    完美解决远程计算机需要网络级别身份验证RDO
    OPPO手机的指令合集(工程模式、串号等)
  • 原文地址:https://www.cnblogs.com/fredkeke/p/7841101.html
Copyright © 2011-2022 走看看