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

带有粗笔画和圆的路径(线)之间的javafx冲突问题 [重复]

端木震博
2023-03-14

我正在使用JavaFx 8库。

我的任务很简单:我想检查圆形是否与周围有粗笔划的路径冲突。问题是函数Path.intersect()和Shape.intersect()都忽略了路径/线周围的笔画。

Path tempPath = new Path(player.getPath().getElements());
//player.getDot() is Circle
if(tempPath.intersects(player.getDot().getBoundsInParent())){
   Shape intersect = Shape.intersect(tempPath, player.getDot());
   if(intersect.getBoundsInLocal().getWidth() != -1){
      System.out.println("Path Collision occurred"); 
   }
}

我的路径由许多LineTo对象组成。格式如下:

/** Creates path and player dot */
private void createPath() {
    this.path = new Path();
    this.path.setStrokeWidth(20);
    this.path.setStroke(Color.RED);
    this.path.setStrokeLineCap(StrokeLineCap.ROUND);
    this.path.setStrokeLineJoin(StrokeLineJoin.ROUND);

    this.dot = new Circle(10, Color.BLUE);
    this.dot.setOpacity(1);
}

如何实现成功的碰撞检测?

共有1个答案

乜建柏
2023-03-14

碰撞检测工作正常:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Circle;
import javafx.scene.shape.ClosePath;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.shape.Shape;
import javafx.scene.shape.StrokeLineCap;
import javafx.scene.shape.StrokeLineJoin;
import javafx.stage.Stage;

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {

        BorderPane root = new BorderPane();

        Circle circle = new Circle(100, 100, 30);
        Path path = new Path();

        double x = 144;

        path.getElements().add(new MoveTo(x, 140));
        path.getElements().add(new LineTo(500, 100));
        path.getElements().add(new ClosePath());

        path.setStrokeWidth(60);
        path.setStrokeLineCap(StrokeLineCap.ROUND);
        path.setStrokeLineJoin(StrokeLineJoin.ROUND);

        Shape shape = Shape.intersect(circle, path);

        boolean intersects = shape.getBoundsInLocal().getWidth() != -1;

        System.out.println("Intersects: " + intersects);

        Pane pane = new Pane();
        pane.getChildren().addAll(circle, path);
        root.setCenter(pane);

        Scene scene = new Scene(root, 800, 600);
        primaryStage.setScene(scene);
        primaryStage.show();

    }

    public static void main(String[] args) {
        launch(args);
    }
}

开关x = 144,测试用x = 145。控制台显示是否有交叉路口。

你的问题是你在比较不同的界限。

有关如何计算各种边界,请参阅节点文档“边界矩形”一节。

 类似资料:
  • 我正试图与拉威尔和vue一起打造一个水疗中心。还安装了用于管理目的的Voyager。旅行者号http://localhost:8000/admin .. 它使用了laravel web路由。 现在无法访问它,我正在使用Vue路由器为我的路由:示例为我的家庭路由(vue)http://localhost:8000/home 应用程序。js 一个pp.vue Home.vue 指数刀身php 网状物p

  • 在将OpenSAML从1.1升级到2.6.1(需要xerces-impl依赖项)之后,启动时会出现以下堆栈: xerces-impl重新定义了一些jre类,并附带了重新定义一些jre接口的XML-API。DataType.DataTypeFactoryImpl来自xerces-impl。 我读过用Java/Maven处理“Xerces地狱”?并尝试排除XML-API,但xerces-impl抛出N

  • null JDBC URL:jdbc:ucanaccess://f://workspaceNetbeans/msaccessdb/data/datenbank2.accdb “用户名”和“密码”留空 “测试连接”-按钮会导致错误消息: 无法使用 net.ucanaccess.jdbc.ucanaccessDriver建立到jdbc:ucanaccess://f:\workspaceNetBeans

  • 我是一名新的程序员,正在学习Java入门课程。我的操作系统是Windows 10。大约4-5个月前,我们最初设置了类路径,从命令行运行了我们的“Hello World”程序,然后再也没有使用过它。 现在我们正在做一个输入/输出重定向到文件的练习,我必须忘记我的类路径是什么,所以我试图重新设置它。 我已经使用以下命令设置了我的类路径: 然后我尝试运行我的程序,它位于目录C:\Users\grant\

  • 我正在尝试绘制一个只有线条但笔画宽度不同的对象。这可能吗? 我的尝试: 不成功,最后一个笔画宽度用于整个< code >路径。

  • 问题内容: 我正在使用Apache Spark开发Java应用程序。我使用这个版本: 在我的代码中,有一个过渡依赖性: 我将应用程序打包到一个JAR文件中。使用将其部署到EC2实例上时,出现此错误。 此错误清楚地表明已加载了同一Apache httpclient库的较旧版本,因此发生此冲突。 解决此问题的好方法是什么? 由于某种原因,我无法在Java代码上升级Spark。但是,我可以使用EC2集群