我正在尝试制作一艘战舰游戏。如何在这种情况下让setOnMouseDragOver工作?
下面是代码的链接:Battleship
基本上,当你点击船按钮(战列舰,巡洋舰,潜艇等)矩形的屏幕上弹出的一个。你可以通过点击它并拖动鼠标来移动这个矩形。将所有事件处理程序添加到Rectangle的类可以在MouseGestures.java类中找到。
事件处理程序被添加到GridPane在GameGUI.java类起始于线82
基本上,我试图找到任何节点您在GridPane在拖动该对象的索引。我可以通过将setOnMouseEntered应用于gridpane中的每个节点来完成此操作,但是当我尝试利用setOnMouseDragEntered时,我什么也得不到。
有没有人有想法如何让这个工作?
只需重申,我想在控制台中打印每个网格窗格的索引,当我拖动节点并将其移动到网格窗格中包含的节点上时。
这些是我已经应用到gridpane节点的事件处理程序。
for (int i=0; i<=11; i++) {
for (int j=0; j<=11; j++) {
int colIndex = i;
int rowIndex = j;
grid2[i][j] = new Rectangle();
grid2[i][j].setStroke(Color.BLACK);
grid2[i][j].setFill(null);
grid2[i][j].setStrokeWidth(1);
grid2[i][j].setWidth(30);
grid2[i][j].setHeight(30);
//Prints index of each grid2[][] upon mouse entry.
grid2[i][j].setOnMouseEntered(e -> {
System.out.printf("Mouse entered cell [%d, %d]%n", colIndex, rowIndex);
});
//Does not work! Want to print index of each grid2[][] upon mouse drag enter.
grid2[i][j].setOnMouseDragEntered(e -> {
System.out.printf("Mouse entered cell [%d, %d]%n", colIndex, rowIndex);
});
//Does not work! Want to print index of each grid2[][] upon mouse drag over.
grid2[i][j].setOnMouseDragOver(e -> {
System.out.printf("Mouse entered cell [%d, %d]%n", colIndex, rowIndex);
});
这些是您在按下其中一个按钮时创建的对象的事件处理程序。
private EventHandler<MouseEvent> onMousePressedEventHandler = event -> {
if (event.getSource() instanceof Rectangle) {
shipSelected = (Rectangle) (event.getSource());
dragContext.x = shipSelected.getTranslateX() - shipSelected.getWidth()/2;
dragContext.y = shipSelected.getTranslateY() - shipSelected.getHeight()/2;
}
};
private EventHandler<MouseEvent> onMouseDragDetectedEventHandler = event -> {
shipSelected.startFullDrag();
System.out.println("startfulldrag");
};
private EventHandler<MouseEvent> onMouseDraggedEventHandler = event -> {
if (event.getSource() instanceof Rectangle) {
shipSelected = (Rectangle) (event.getSource());
shipSelected.setX(dragContext.x + event.getX());
shipSelected.setY(dragContext.y + event.getY());
}
};
哇!谢谢。我真的一直在搞这个愚蠢的事情,像4天。这就是它所需要的。我很感激。再次感谢。 –
有了这样好的反馈,我们很乐意提供帮助 – mik