2 o1101574955 o1101574955 于 2016.02.23 15:59 提问

javafx让小球从上次静止的位置开始运行? 1C

有一个BallPane类,

 package javafx_ex;
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{
    public final 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.setFill(Color.GREEN);
        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()+1);
    }

    public void decreaseSpeed(){
        animation.setRate(animation.getRate()>0 ? animation.getRate()-1 : 0);
    }

    public DoubleProperty rateProperty(){
        if(animation.getRate()==0.0){
            circle=new Circle(circle.getCenterX(),circle.getCenterY(),radius);
            circle.setFill(Color.GREEN);
        }
        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);
    }
}

主函数,

 package javafx_ex;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.input.KeyCode;
import javafx.scene.control.Slider;
import javafx.scene.layout.BorderPane;

public class BounceBallSlider extends Application{
    @Override
    public void start(Stage primaryStage){
        BallPane ballPane=new BallPane();

        Slider slSpeed=new Slider();
        slSpeed.setMax(20);
        slSpeed.setValue(10);
        ballPane.rateProperty().bind(slSpeed.valueProperty());

        BorderPane pane=new BorderPane();
        pane.setCenter(ballPane);
        pane.setBottom(slSpeed);

        ballPane.setOnMousePressed(e->ballPane.pause());
        ballPane.setOnMouseReleased(e->ballPane.play());
        slSpeed.setOnKeyPressed(e->{
            if(e.getCode()==KeyCode.UP){
                slSpeed.setValue(slSpeed.getValue()+1);
            }
            else if(e.getCode()==KeyCode.DOWN){
                slSpeed.setValue(slSpeed.getValue()-1);
            }
        });

        Scene scene=new Scene(pane,250,150);
        primaryStage.setTitle("BounceBallControl");
        primaryStage.setScene(scene);
        primaryStage.show();

        slSpeed.requestFocus();
    }
    public static void main(String[] args){
        Application.launch(args);
    }
}

出现的问题是:小球速度降为0后,再增加速度,小球不是从上次静止的位置开始运动,如果让它从上次静止的位置开始运动呢?
我查看了Animation.class的源代码,里面有这样一句话,

 An {@code Animation}'s play head can be randomly positioned, whether it is
 * running or not. If the {@code Animation} is running, the play head jumps to
 * the specified position immediately and continues playing from new position.
 * If the {@code Animation} is not running, the next {@link #play()} will start
 * the {@code Animation} from the specified position.

这句话是什么意思呢?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
编程苦手GW——OpenGL学习练习,落地变色的弹跳小球
编程苦手GW——OpenGL学习练习,落地变色的弹跳小球开始学习OpenGL的状态中,还并未开始系统梳理。作为个人完成的第一次作业,其中有大量冗杂、不完美之处,待深入学习后再返回完善。。``` /* 绘制一个二维小球从高空落地、弹起、再落地…不断反复,直到小球静止在地面上的过程。要求: (1)小球每次接触地面之后,即随机改遍颜色; (2)如果可能,小球接触地面时,会发生挤压变形; */
javafx小球移动
可以点击上下左右使小球移动,并且不超出界面。。。。
Java实验(20) 沿正弦曲线运动的小球
如图,编程实现让小球沿着正弦曲线从左向右运动,如果到达曲线右边界,则回到最左边重新开始运动。用户按一次空格键可以暂停小球运动,再按一次空格键可以让小球继续运动。 import javafx.animation.PathTransition; import javafx.animation.Timeline; import javafx.application.Applicat
利用JavaFX实现一个弹球动画
程序使用Timeline来实现弹球动画,运行结果如图: 一个球在窗口中弹动 下面是编写这个程序的关键步骤: 1)定义一个名为BallPane的Pane类的子类,用于显示一个弹动的球。 2)定义一个名为BounceBallcontrol的Application的子类,用来使用鼠标动作控制弹球。当鼠标按下的时候动画暂停,当鼠标释放的时候动画恢复执行。按下UP/DOWN方向键可以增加/减少动画
OpenGL小球自由落体弹起
用OpenGL库写的一个小球落地后弹起的程序,并且无速度损失,弹起到起始高度,如果你修改起始x方向速度xstep的初值,小球可以边跳跃边前进,并且碰到边框会反弹回来。为了验证弹起高度是否等于原来高度,我画了两条红色基准线,你会看到两条线一次又一次的重合。
Android小程序-模拟小球平抛落地反弹到静止过程
一、开发运动体Movable类    我们将小球视为一个可移动物体Movable对象,该类中除了包含小球图片对象之外,还包括如位置坐标、水平竖直速度等一系列用于模拟小球运动的成员变量和一些方法。具体代码如下: package xiao.fuyan.ball; import android.graphics.Bitmap; import android.graphics.Canvas;
java事件机制之通过上下左右键来控制小球为位置的移动演示
/** * 功能是加深对事件处理机制的理解 * 1:通过上下左右键来控制小球为位置的移动 */package com.test4;import java.awt.*;import javax.swing.*;import java.awt.event.*;public class Demo9_4 extends JFrame { MyPanel mp=null; public static voi
怎样让小球沿着一条曲线运动-类似于祖玛游戏中的小球的运动
怎样让小球沿着一条曲线运动?类似于祖玛游戏中的小球的运动。 一、路径首先是已知的。 1.用描点法,定大概。 2.再将上面的点位提取出坐标,加入数组: var MapData=[]; var MapArray:Array =  [[879,57],[832,55],[648,48],[418,49],[142,68],[66,
JavaFX战旗类游戏开发 第六课 移动范围的获取
有一段时间没有写这个战旗游戏Demo的教程了。现在来继续。   战旗类游戏的范围获取其实并不复杂,主要是节点的遍历和权值的比较。   大家知道,在A*Star最短寻径算法里,权值是有个G值和H值的,G值是起点到当前点的移动量(通常相邻两格移动量在1),H值是当前点到目标点的移动量估算值。   当然,对于SLG游戏中寻找移动范围,并没有这么复杂,我们在这里只需一个G值,用于表示移动量。
unity 从相机的位置发射小球并打到鼠标点击的位置
1、首先制作了一个预制小球。 2、获取了相机到鼠标点击位置的射线。 3、射线的方向为小球运动的方向。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Shooter : MonoBehaviour { public float moveSpeed