• 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);
        }
    
    }
  • 相关阅读:
    数据预处理
    数据挖掘-聚类分析
    数据挖掘分类--判别式模型 ----支持向量机
    神经网络
    数据挖掘-贝叶斯定理
    数据挖掘之分类和预测
    关于stm32的IO口的封装
    星际炸弹——炸弹爆炸时间计算
    共阳极数码管三极管驱动
    自定义的TIME.H头文件
  • 原文地址:https://www.cnblogs.com/fredkeke/p/7841101.html
Copyright © 2020-2023  润新知