猿问

使用JavaFX检查形状的碰撞

我正在尝试进行一些碰撞检测。对于这个测试,我使用简单的矩形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>() {

     

30秒到达战场
浏览 977回答 2
2回答

叮当猫咪

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

相关分类

Java
我要回答