You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaFX中实现按压跳跃按钮触发红色矩形的跳跃效果?

嘿,我刚好在JavaFX里实现过类似的跳跃动画效果,给你一套完整的解决方案,完美满足你要的「上升→短暂停留→下落」的逻辑!

核心实现思路

不用纠结PathTransition,我们可以用JavaFX的**SequentialTransition**(顺序动画容器)把三个独立的动画串起来,刚好对应跳跃的三个阶段:

  • 阶段1:上升动画(TranslateTransition让矩形Y轴向上移动)
  • 阶段2:空中停留(PauseTransition设置一段等待时间)
  • 阶段3:下落动画(TranslateTransition让矩形Y轴回到初始位置)
完整代码示例

下面是补全后的可运行代码,你可以直接参考:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.animation.PauseTransition;
import javafx.animation.SequentialTransition;
import javafx.animation.TranslateTransition;
import javafx.util.Duration;

public class JumpAnimationDemo extends Application {

    @Override
    public void start(Stage primaryStage) {
        // 创建红色矩形
        Rectangle redRect = new Rectangle(50, 50, Color.RED);
        // 设置初始位置(底部居中)
        redRect.setX(200);
        redRect.setY(300);

        // 创建跳跃按钮
        Button jumpBtn = new Button("跳跃");
        jumpBtn.setX(200);
        jumpBtn.setY(360);

        // 定义上升动画:Y轴向上移动100像素,耗时0.3秒
        TranslateTransition riseAnim = new TranslateTransition(Duration.seconds(0.3), redRect);
        riseAnim.setByY(-100); // 向上是负方向

        // 定义空中停留:停留0.2秒
        PauseTransition pauseAnim = new PauseTransition(Duration.seconds(0.2));

        // 定义下落动画:Y轴回到初始位置,耗时0.3秒
        TranslateTransition fallAnim = new TranslateTransition(Duration.seconds(0.3), redRect);
        fallAnim.setByY(100);

        // 把三个动画按顺序组合起来
        SequentialTransition jumpSequence = new SequentialTransition(riseAnim, pauseAnim, fallAnim);

        // 按钮点击事件:触发跳跃动画,避免重复点击
        jumpBtn.setOnAction(e -> {
            if (!jumpSequence.getStatus().equals(jumpSequence.RUNNING)) {
                jumpSequence.playFromStart();
            }
        });

        // 组装场景
        Pane root = new Pane(redRect, jumpBtn);
        Scene scene = new Scene(root, 450, 400);
        primaryStage.setTitle("矩形跳跃Demo");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
关键细节说明
  • 避免重复触发:在按钮点击事件里判断动画是否正在运行,防止用户连续点击导致动画混乱
  • 动画参数调整:你可以修改Duration.seconds()里的数值,或者setByY()的像素值,来调整跳跃的高度、速度和停留时间
  • 动画状态重置:playFromStart()会确保每次点击都从初始状态开始播放动画,不会出现中途续播的问题

这样实现出来的效果完全符合你要的「上升-停留-下落」的跳跃逻辑,而且代码结构清晰,很容易扩展修改~

内容的提问来源于stack exchange,提问作者Dannon Gilbert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:19:29