当前位置: 首页 > 知识库问答 >
问题:

JavaFX 冲突检测 - 任何提示?

萧成文
2023-03-14

我目前正在为一个学校项目制作一个小游戏,冲突检测有问题。

这是我的时间线和跳转按钮代码:

Timeline timeline = new Timeline(new KeyFrame(Duration.ZERO,
                    new KeyValue(player.translateYProperty(), ty, 
                    interpolator)),
                    new KeyFrame(Duration.seconds(.5),
                    new KeyValue(player.translateYProperty(), ty-40, 
                    interpolator)));

Timeline eTimeline = new Timeline(new KeyFrame(Duration.ZERO,
                     new KeyValue(enemy.translateXProperty(), ex, 
                     interpolator2)),
                     new KeyFrame(Duration.seconds(3),
                     new KeyValue(enemy.translateXProperty(), ex-40, 
                     interpolator2)));

JumpBtn.setOnAction(new EventHandler<ActionEvent>()
    {
        public void handle(ActionEvent e) {

            timeline.setCycleCount(2);
            timeline.setAutoReverse(true);
            JumpBtn.setDisable(true);
            setScore();
            timeline.setOnFinished(evt -> JumpBtn.setDisable(false));
            timeline.play();
        }
    });

这是我对碰撞检测的尝试:

    double playX = player.getX();
    double enemX = enemy.getX();
    double playY = player.getY();
    double enemY = enemy.getY();
    boolean collisionX = false;
    boolean collisionY = false;

    if (playX == 450 && enemX == 450){
        collisionX = true;
        System.out.println("Collision X Detected");
    }
    if (enemY == 480 && playY == 420){
        collisionY = true;
        System.out.println("Collision Y Detected");
    }

    while (death = false){
        if (collisionX = true){
            if(collisionY = true){
                death = true;
                System.out.println("Player is dead");
            }
        }
    }

我只能假设这不起作用,因为它不会不断地寻找X和Y位置,但我不确定如何做到这一点。

共有1个答案

夏侯嘉荣
2023-03-14

我不确定JavaFX是否有

contains(Point point) 

方法,但是如果这样,您应该使用它来检测两个不同形状之间的冲突。请记住,如果至少组成形状/多边形的其中一个点与另一个形状/多边形接触或在另一个形状/多边形内部,则两个形状/多边形发生碰撞。

[==这包含在括号中,因此其冲突==]

 类似资料:
  • 问题内容: 如何检测两个元素是否发生冲突? 这两个div是简单的彩色框,彼此垂直,因此没有复杂的形状或角度。 问题答案: 一般思路-获得框的偏移量和尺寸,并检查它们是否重叠。 如果要更新,可以使用: 另外,请注意,您可以针对特定示例优化功能。 因为它们是固定的,所以您不必重复读取框的尺寸(就像我在代码中一样)。您可以在页面加载时读取它们(将其读取到变量中),然后仅读取变量 小盒子的水平位置不会改变

  • 我正在尝试为我的大学工作制作一个基于2D平台的游戏(在SFML)。我不是要求任何人为我编写一些代码,但如果有人能提供一些指示,我将非常感激:) 目前我有大约13门课,包括: BaseEntity(大多数游戏对象都是由此派生的) 玩家(继承自BE) 魔法宝石(玩家需要这些来通过关卡晋级) 平台 SolidBlock(从平台继承) 可以说,我已经构建了大部分的游戏“积木”--每个类都有自己的更新函数,

  • 我使用下面的类制作了一个项目符号列表和一个精灵列表。如何检测子弹是否与子画面发生碰撞,然后删除该精灵和子弹?

  • 我写了下面的JavaFX程序,其中两个矩形节点正在转换转换: 如何对“平移转换”中的两个矩形节点实施冲突检测?

  • 我正在尝试检查StackPane中节点的冲突检测。下面是我的代码: 在这里,如果我使用AnchorPane,碰撞检测就会工作。但在StackPane的情况下,我无法做到这一点。我猜这是因为堆栈窗格的坐标系统(如果我错了,请纠正我)。 所以请帮我实现上述两个矩形的碰撞检测。另外,如果我想更改节点的坐标,请提供一些建议(如果您知道),以便在StackPane内的节点上实现此类冲突检测。

  • 我正在尝试制作一个砖块游戏,在碰撞检测方面遇到了一些问题。如果你曾经玩过撞砖游戏,你知道在划桨时,如果球向左移动,而你击中了顶部的左侧,那么它会继续向右移动。不过,在这种情况下,如果你从右侧击球,那么球就会改变方向。而且如果你在桨的侧面撞击它,它会在Y轴上反弹。由于我不知道如何完成桨叶的顶部,我无法向您展示代码,因为我没有任何代码:)这是我用于侧面的代码: 发生的是,当球从侧面被击中时,它正好穿过