我正在尝试进行一些碰撞检测。对于这个测试,我使用简单的矩形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但我认为这是私有的,而且不清楚哪个是改变相同属性的公共方法。
添加回答
举报
0/150
提交
取消