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);
        }
    
    }
  • 相关阅读:
    第五周作业
    画图实例:一个计算机商店的基于Wed的订单处理系统的DFD图和ER图
    为什么要进行需求分析?通常对软件系统有哪些需求?
    面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里
    几大开发模式的区别与联系
    说说我的困惑
    Python单元测试——深入理解unittest
    Devexpress 自定义下拉列表
    Devexpress TextEdit设置文本只能输入数字
    jetbain软件授权码
  • 原文地址:https://www.cnblogs.com/fredkeke/p/7841101.html
Copyright © 2011-2022 走看看