打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何在JavaFX中让球从墙上弹开?

我是Javafx的新手,我正在创建一个简单的程序.我想要达到的目标是让球从墙上弹开,但我还没弄明白该怎么做.另外,请随意留下有关我的代码的其他建议.

这是源代码:

public class GamePractice extends Application {    public static Circle circle;    public static Pane canvas;    private long counter = 0;    @Override    public void start(Stage primaryStage) {        canvas = new Pane();        Scene scene = new Scene(canvas, 800, 600);        primaryStage.setTitle("Game");        primaryStage.setScene(scene);        primaryStage.show();        circle = new Circle(15,Color.BLUE);        circle.relocate(100, 100);                 canvas.getChildren().addAll(circle);        Timeline loop = new Timeline(new KeyFrame(Duration.millis(10), new EventHandler<ActionEvent>() {            @Override            public void handle(ActionEvent t) {                if (counter   % 10 == 0)                {                    circle.setLayoutX(circle.getLayoutX()   10);                    circle.setLayoutY(circle.getLayoutY()   10);                    //This is what I currently have, am I headed the right direction?                    //Check X and Y for collision with the ball                    if ((circle.getTranslateX() == canvas.getWidth() - 10) || (circle.getTranslateY() == canvas.getHeight() - 10)) {                        //How do I make the ball bounce?                    }                }            }        }));        loop.setCycleCount(Timeline.INDEFINITE);        loop.play();    }

我很感激帮助.

解决方法:

一个提示:你应该avoid comparing double values for exact equality a == b.

通过对代码进行一些小的更改,您已经在那里:

package learn.javafx;import javafx.animation.KeyFrame;import javafx.animation.Timeline;import javafx.application.Application;import javafx.event.ActionEvent;import javafx.event.EventHandler;import javafx.geometry.Bounds;import javafx.scene.Scene;import javafx.scene.layout.Pane;import javafx.scene.paint.Color;import javafx.scene.shape.Circle;import javafx.stage.Stage;import javafx.util.Duration;public class GamePractice extends Application {    public static Circle circle;    public static Pane canvas;    @Override    public void start(final Stage primaryStage) {        canvas = new Pane();        final Scene scene = new Scene(canvas, 800, 600);        primaryStage.setTitle("Game");        primaryStage.setScene(scene);        primaryStage.show();        circle = new Circle(15, Color.BLUE);        circle.relocate(100, 100);        canvas.getChildren().addAll(circle);        final Timeline loop = new Timeline(new KeyFrame(Duration.millis(10), new EventHandler<ActionEvent>() {            double deltaX = 3;            double deltaY = 3;            @Override            public void handle(final ActionEvent t) {                circle.setLayoutX(circle.getLayoutX()   deltaX);                circle.setLayoutY(circle.getLayoutY()   deltaY);                final Bounds bounds = canvas.getBoundsInLocal();                final boolean atRightBorder = circle.getLayoutX() >= (bounds.getMaxX() - circle.getRadius());                final boolean atLeftBorder = circle.getLayoutX() <= (bounds.getMinX()   circle.getRadius());                final boolean atBottomBorder = circle.getLayoutY() >= (bounds.getMaxY() - circle.getRadius());                final boolean atTopBorder = circle.getLayoutY() <= (bounds.getMinY()   circle.getRadius());                if (atRightBorder || atLeftBorder) {                    deltaX *= -1;                }                if (atBottomBorder || atTopBorder) {                    deltaY *= -1;                }            }        }));        loop.setCycleCount(Timeline.INDEFINITE);        loop.play();    }    public static void main(final String[] args) {        launch(args);    }}
来源:http://www.icode9.com/content-1-213451.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
很好的JavaFX2.0基础教程
JavaFX快速入门
JavaFX控件
JavaFx2.0
《计算机专业英语》Unit 21 2D Animation
JavaFX开发权威指南(一)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服