为了账号安全,请及时绑定邮箱和手机立即绑定

使用JavaFX检查形状的碰撞

使用JavaFX检查形状的碰撞

30秒到达战场 2019-09-03 15:44:20
我正在尝试进行一些碰撞检测。对于这个测试,我使用简单的矩形Shape,并检查它们Bound,以确定它们是否发生碰撞。虽然检测不能按预期工作。我尝试过使用不同的方法移动对象(relocate,setLayoutX,Y)以及不同的绑定检查(boundsInLocal,boundsInParrent等),但我仍然无法使其工作。如您所见,检测仅适用于一个对象,即使您有三个对象,也只有一个检测到碰撞。这是一些演示问题的工作代码:import javafx.application.Application;import javafx.event.EventHandler;import javafx.scene.Cursor;import javafx.scene.Group;import javafx.scene.Scene;import javafx.scene.input.MouseEvent;import javafx.scene.paint.Color;import javafx.scene.shape.Rectangle;import javafx.stage.Stage;import java.util.ArrayList;public class CollisionTester extends Application {    private ArrayList<Rectangle> rectangleArrayList;    public static void main(String[] args) {        launch(args);    }    public void start(Stage primaryStage) {        primaryStage.setTitle("The test");        Group root = new Group();        Scene scene = new Scene(root, 400, 400);        rectangleArrayList = new ArrayList<Rectangle>();        rectangleArrayList.add(new Rectangle(30.0, 30.0, Color.GREEN));        rectangleArrayList.add(new Rectangle(30.0, 30.0, Color.RED));        rectangleArrayList.add(new Rectangle(30.0, 30.0, Color.CYAN));        for(Rectangle block : rectangleArrayList){            setDragListeners(block);        }        root.getChildren().addAll(rectangleArrayList);        primaryStage.setScene(scene);        primaryStage.show();    }    public void setDragListeners(final Rectangle block) {        final Delta dragDelta = new Delta();        block.setOnMousePressed(new EventHandler<MouseEvent>() {            @Override            public void handle(MouseEvent mouseEvent) {                // record a delta distance for the drag and drop operation.                dragDelta.x = block.getTranslateX() - mouseEvent.getSceneX();                dragDelta.y = block.getTranslateY() - mouseEvent.getSceneY();                block.setCursor(Cursor.NONE);            }        });        block.setOnMouseReleased(new EventHandler<MouseEvent>() {     
查看完整描述

2 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

看起来我现在感兴趣的一切都在该文件的第一堂课上。我拿起的一件重要事情是用于检查碰撞的changeListener。还要在检查上使用LayoutBounds(??)。我是否应该使用setLayoutX或translateX作为矩形?我看到你正在使用setX但我认为这是私有的,而且不清楚哪个是改变相同属性的公共方法。

查看完整回答
反对 回复 2019-09-03
  • 2 回答
  • 0 关注
  • 976 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信